第一步 , 修改/etc/sysctl.conf文件 , 在文件中添加如下行:
net.ipv4.ip_local_port_range = 1024 65000这表明将系统对本地端口范围限制设置为1024~65000之间 。请注意 , 本地端口范围的最小值必须大于或等于1024;而端口范围的最大值则必须<=65535.修改完后保存此文件 。
第二步 , 执行sysctl命令:[speng@as4 ~]$ sysctl -p如果系统没有错误提示 , 就表明新的本地端口范围设置成功 。如果按上述端口范围进行设置 , 则理论上单独一个进程最多可以同时建立60000多个TCP客户端连接 。
第二种无法建立TCP连接的原因可能是因为Linux网络内核的IP_TABLE防火墙对最大跟踪的TCP连接数有限制 。此时程序会表现为在 connect()调用中阻塞 , 如同死机 , 如果用tcpdump工具监视网络 , 也会发现根本没有TCP连接时客户端发SYN包的网络流量 。由于 IP_TABLE防火墙在内核中会对每个TCP连接的状态进行跟踪 , 跟踪信息将会放在位于内核内存中的conntrackdatabase中 , 这个数据库的大小有限 , 当系统中存在过多的TCP连接时 , 数据库容量不足 , IP_TABLE无法为新的TCP连接建立跟踪信息 , 于是表现为在connect()调用中阻塞 。此时就必须修改内核对最大跟踪的TCP连接数的限制 , 方法同修改内核对本地端口号范围的限制是类似的:
第一步 , 修改/etc/sysctl.conf文件 , 在文件中添加如下行:net.ipv4.ip_conntrack_max = 10240这表明将系统对最大跟踪的TCP连接数限制设置为10240.请注意 , 此限制值要尽量小 , 以节省对内核内存的占用 。
第二步 , 执行sysctl命令:[speng@as4 ~]$ sysctl -p如果系统没有错误提示 , 就表明系统对新的最大跟踪的TCP连接数限制修改成功 。如果按上述参数进行设置 , 则理论上单独一个进程最多可以同时建立10000多个TCP客户端连接 。
三、高并发采用的IO访问方案
使用支持高并发网络I/O的编程技术在Linux上编写高并发TCP连接应用程序时 , 必须使用合适的网络I/O技术和I/O事件分派机制 。可用的I/O技术有同步I/O(当前I/O访问完成再进行下一次访问),非阻塞式同步I/O(也称反应式I/O , select,poll,epoll实现) , 以及异步I/O.在高TCP并发的情形下 , 如果使用同步I/O,这会严重阻塞程序的运转 , 除非为每个TCP连接的I/O创建一个线程 。但是 , 过多的线程又会因系统对线程的调度造成巨大开销 。因此 , 在高TCP并发的情形下使用同步 I/O是不可取的.
这时可以考虑使用非阻塞式同步I/O或异步I/O.非阻塞式同步I/O的技术包括使用select() , poll() , epoll等机制 。异步I/O的技术就是使用AIO. 从I/O事件分派机制来看 , 使用select()是不合适的 , 因为它所支持的并发连接数有限(通常在1024个以内) 。如果考虑性能 , poll()也是不合适的 , 尽管它可以支持的较高的TCP并发数 , 但是由于其采用"轮询"机制 , 当并发数较高时 , 其运行效率相当低 , 并可能存在I/O事件分派不均 , 导致部分TCP连接上的I/O出现"饥饿"现象 。而如果使用epoll或AIO,则没有上述问题(早期Linux内核的AIO技术实现是通过在内核中为每个 I/O请求创建一个线程来实现的 , 这种实现机制在高并发TCP连接的情形下使用其实也有严重的性能问题 。但在最新的Linux内核中 , AIO的实现已经得到改进) 。
综上所述 , 在开发支持高并发TCP连接的Linux应用程序时 , 应尽量使用epoll或AIO技术来实现并发的TCP连接上的I/O控制 , 这将为提升程序对高并发TCP连接的支持提供有效的I/O保证 。
epoll是Linux内核为处理大批量文件描述符而作了改进的poll , 是Linux下多路复用IO接口select/poll的增强版本 , 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率 。另一点原因就是获取事件的时候 , 它无须遍历整个被侦听的描述符集 , 只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了 。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外 , 还提供了边缘触发(Edge Triggered) , 这就使得用户空间程序有可能缓存IO状态 , 减少epoll_wait/epoll_pwait的调用 , 提高应用程序效率 。
推荐阅读
- linux下高并发服务器实现
- 四个使用率最高的网络命令,你get了吗?
- 为什么网吧电脑配置不高,玩起来却从来不卡?
- 基于Linux系统的高可用中小型网站集群架构说明
- 直通车怎么提高质量得分 怎么提高直通车的质量分
- 春季提高宝宝免疫力很重要 可以多吃这些食物
- 春季长高正是好时节 宝宝春季增高妙招有哪些
- 盘点十大性价比高的汽车之豪华汽车
- 怎么提高直通车的质量分 淘宝直通车质量分迅速上10怎么操作
- 高马尾|58岁柔情硬汉相亲54岁大姐,一见面手脚就不安分,红娘:你离远点
