Linux 内核参数优化设置
上一篇 / 下一篇 2016-07-07 16:52:06 / 个人分类:中间件调优
vi /etc/security/limits.conf
#添加如下的行
* soft noproc 10240
* hard noproc 10240
* soft nofile 10240
* hard nofile 10240
说明:*代表针对所有用户
noproc是代表最大进程数
nofile是代表最大文件打开数
要使limits.conf文件配置生效,必须要确保pam_limits.so文件被加入到启动文件中。查看/etc/pam.d/login文件中有:
session required /lib/security/pam_limits.so
附录1:centos 6.*可以修改/etc/security/limits.d/90-nproc.conf
但,centos 5.*并没有90-nproc.conf这个文件,我这边是通过修改/etc/security/limits.conf,在最后添加
* soft nproc 65535
* hard nproc 65535
来实现的
要是上面服务没有生效可以重启服务
sysctl -p
/etc/init.d/sshd restart
2、当服务器出现大量的网络连接出现TIME_WAIT和端口不够用时,采用下面解决办法,可以设置为默认值
在/etc/sysctl.conf加入下面几句话
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65000 ##端口分配范围
net.ipv4.tcp_max_syn_backlog = 32768 ##这里是设置系统内存是4G为参考
#net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000 ##设置"time_wait"的桶最多容纳5000个
添加完毕以后
sysctl -p让以上配置生效
下面是对上面的参数一个个作解释
net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_syncookies=1
表示选开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies进行处理
net.ipv4.tcp_fin_timeout = 10
这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。2.2内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_keepalive_time = 1200
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 32768
表示SYN队列的长度,.默认为1024(这个根据系统内存设置对比关系是对于128M内存设置时1024,加大队列长度为32768,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。
3、下面参数是根据并发数值来调整(一般不建议调整)
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_max_orphans = 131072
下面是对上面的参数一个个作解释
net.core.somaxconn
选项默认值是128,这个参数用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此,需要结合并发请求数来调节此值。
net.core.netdev_max_backlog
选项表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目
net.ipv4.tcp_max_orphans
选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位并打印出警告信息。这个限制只是为了防止简单的DoS攻击。不能过分依靠这个限制甚至人为减小这个值,更多的情况是增加这个值。
net.ipv4.tcp_rmem
用来配置读缓冲的大小,三个值,第一个是这个读缓冲的最小值,第三个是最大值,中间的是默认值。我们可以在程序中修改读缓冲的大小,但是不能超过最小与最大。为了使每个socket所使用的内存数最小,我这里设置默认值为4096。
net.ipv4.tcp_wmem
用来配置写缓冲的大小。读缓冲与写缓冲在大小,直接影响到socket在内核中内存的占用
net.ipv4.tcp_mem
则是配置tcp的内存大小,其单位是页,而不是字节。当超过第二个值时,TCP进入pressure模式,此时TCP尝试稳定其内存的使用,当小于第一个值时,就退出pressure模式。当内存占用超过第三个值时,TCP就拒绝分配socket了,查看dmesg,会打出很多的日志“TCP: too many of orphaned sockets”。
net.ipv4.tcp_max_orphans
这个值也要设置一下,这个值表示系统所能处理不属于任何进程的socket数量,当我们需要快速建立大量连接时,就需要关注下这个值了。当不属于任何进程的socket的数量大于这个值时,dmesg就会看到”too many of orphaned sockets”
4、当硬件出现瓶颈时才进行调整(一般不建议调整)
CPU性能调整
当一个系统的CPU空闲时间或者等待时间小于5%时,我们就可以认为系统的CPU资源耗尽,我们应该对CPU进行性能调整。
CPU性能调整方法:
编辑/proc/sys/kernel/中的文件,修改内核参数
#cd /proc/sys/kernel
# ls /proc/sys/kernel
acct hotplug panic real-root-dev
cad_pid modprobe panic_on_oops sem
cap-bound msgmax pid_max shmall
core_pattern msgmnb powersave-nap shmmax
core_uses_pid msgmni print-fatal-signals shmmni
ctrl-alt-del ngroups_max printk suid_dumpable
domainname osrelease printk_ratelimit sysrq
exec-shield ostype printk_ratelimit_burst tainted
exec-shield-randomize overflowgid pty threads-max
hostname overflowuid random version
一般可能需要编辑的是pid_max和threads-max,如下:
# sysctl kernel.threads-max
kernel.threads-max = 8192
# sysctl kernel.threads-max=10000
kernel.threads-max = 10000
Memory性能调整
当一个应用系统的内存资源出现下面的情况时,我们认为需要进行Memory性能调整:
页面频繁换进换出;
缺少非活动页。
例如在使用vmstat命令时发现,memory的cache使用率非常低,而swap的si或者so则有比较高的数据值时,应该警惕内存的性能问题。
Memory性能调整方法:
1。关闭非核心的服务进程。
相关的方法请见CPU性能调整部分。
2。修改/proc/sys/vm/下的系统参数。
# ls /proc/sys/vm/
block_dump laptop_mode nr_pdflush_threads
dirty_background_ratio legacy_va_layout overcommit_memory
dirty_expire_centisecs lower_zone_protection overcommit_ratio
dirty_ratio max_map_count page-cluster
dirty_writeback_centisecs min_free_kbytes swappiness
hugetlb_shm_group nr_hugepages vfs_cache_pressure
# sysctl vm.min_free_kbytes
vm.min_free_kbytes = 1024
# sysctl -w vm.min_free_kbytes=2508
vm.min_free_kbytes = 2508
# cat /etc/sysctl.conf
vm.min_free_kbytes=2058
3。配置系统的swap交换分区等于或者2倍于物理内存。
# free
total used free shared buffers cached
Mem: 987656 970240 17416 0 63324 742400
-/+ buffers/cache: 164516 823140
Swap: 1998840 150272 1848568
相关阅读:
- Linux下的“锁”事儿 (zaza9084, 2016-6-30)
- 解决Linux操作系统下AES解密失败的问题 (zaza9084, 2016-7-01)
- Linux下多版本php共存的原理、方法 (zaza9084, 2016-7-04)
- 嵌入式Linux的调试技术 (zaza9084, 2016-7-05)
- Linux开发商计划停止开发32位版本 (zaza9084, 2016-7-06)
- 嵌入式Linux调试技术 (zaza9084, 2016-7-06)
- 基于Linux(centos)的svn环境搭建 (zaza9084, 2016-7-07)
- linux常用命令一 (datoucai, 2016-7-07)
- shell脚本实战:实用脚本 (xuquan, 2016-7-07)