使用Linux做为长链接的web服务器时,为了增长服务的容量,以及处理性能,须要修改一些参数。html
1、多进程绑定CPU node
一、使用taskset命令能够绑定进程到指定CPU,以减小多核CPU环境中,单进程在多个CPU之间却换运行而产生的CPU上下文却换。linux
taskset参数:web
-p 指定已存在进程的pid,而不是启动一个进程;同时该命令还返回该进程当前的CPU-list掩码,如:ubuntu
0x00000001 is processor #0 0x00000003 is processors #0 and #1 0xFFFFFFFF is all processors (#0 through #31)
-c 指定进程的CPU列表,该列表可使用逗号分隔,或者区间横线符号,如:0,5,7,9-11.缓存
taskset -cp 1,2,3 9876 #指定9876进程在1,2,3CPU上运行服务器
taskset -c 1,2,3 node test.js #在CPU1,2,3上启动一个进程网络
参考:http://yunwei.org/123/ ; http://hi.baidu.com/zhongalin_hust/item/d8a556385c5a2983f5e4ad18socket
二、绑定CPU的好处,主要由两点:1)提升CPU缓存的命中率,避免却换执行的CPU致使的缓存换入换出。2)平衡各个CPU之间的负载。tcp
参考:Nginx的CPU绑定优化:http://blog.csdn.net/wangkun_dhcc/article/details/8713336
管理处理器的亲和性:http://www.ibm.com/developerworks/cn/linux/l-affinity.html
2、使用nice和renice来修改进程的优先级
nice,renice分别用于启动时与启动后修改进程的nice值,nice值为正表示优先级下降,为负值表示优先级提升,进程全部者容许下降优先级,可是只有root才能够提升优先级。
nice参数
-n val node test.js #启动的时候设置nice值
renice val pid
3、调整文件描述符限制
linux中文件描述符有两种:
一是系统级别的限制(表示全部进程总数量限制):
修改 /etc/sysctl.conf文件,增长以下两行 fs.file-max = 1000000 --系统级别全部进程可打开的文件数(ubuntu默认10万) fs.nr_open = 1000000 --定义了file-max容许被修改的最大值,file-max不能够超过该值(ubuntu默认100万)
使用 /etc/sysctl.conf 后可使用 sysctl -p 生效 也能够修改以下两个文件,效果同样(/etc/sysctl.conf中得配置,是直接对应到 /proc/sys 目录下面): /proc/sys/fs/file-max /proc/sys/fs/nr_open
二是用户级别的限制(表示系统中的单个用户可打开的文件数):
修改配置文件: /etc/security/limits.conf * soft nofile 1000000 * hard nofile 1000000
修改后能够采用重登录,或者重启的方式生效。
另外可使用ulimia -a的方式来查看 open files 项是否为修改后的值。
所以在服务端,须要同时修改系统与用户级别的限制,而在测试客户机器中,因为打开的文件数很是有限,所以默认的系统限制已经足够,只须要修改用户级别(默认1024)的限制便可。(ubuntu 默认 file-max大约10万,nr_open大约100万)
4、网络资源修改
修改配置文件 /etc/sysctl.conf ,修改后使用 sysctl -p net.core.somaxconn = 2048 ---监听队列最大值 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 100000 ---网络设备接收到的数据,比处理快时,容许保存的最大包数量 net.ipv4.tcp_rmem = 40960 40960 16777216 ---TCP读缓存大小 最小、默认、最大 net.ipv4.tcp_wmem = 40960 40960 16777216 net.ipv4.tcp_mem = 786432 2097152 3145728 ---系统TCP内存使用限制,以页为单位 net.ipv4.tcp_max_syn_backlog = 32786 --未创建链接队列,能够增长等待链接创建的TCP数量 net.ipv4.tcp_fin_timeout = 15 ---主动断开链接,发送FIN后等待对方ACK的时间,默认60秒 net.ipv4.tcp_tw_reuse = 1 --是否可使用TIME_WAIT,TCP链接用于创建新链接 net.ipv4.tcp_tw_recycle = 1 --是否开启带回收TIME——WAIT TCP的功能 ? net.ipv4.tcp_max_orphans = 131072 --系统容许没有归属的socket数量 net.ipv4.ip_local_port_range = 1024 65535
因为服务端须要保持大量的socket连接,所以适当地减低每一个socket的缓冲区大小,有利于减小对内存的占用。
而对于客户端,只须要修改 ip_local_port_range 便可。默认状况下,端口范围为从 32768 - 61000 只有一万多个端口可使用。
5、判断已启动进程的系统资源限制
修改了系统限制以后,以后启动的进程将采用新的限制,而已经启动的进程将保持原有的限制。
当不肯定进程的限制时,能够经过查看 /proc/pid/limits 文件来了解主要的资源限制。