http://www.longtask.com/blog/
做benchmark测试的过程中,总是会涉及到linux操作系统底层的设置导致无法充分利用机器的性能,在调试的过程中,不少资料没能和linux kernel版本对应上导致一些参数的设置错误。根据现有服务器的硬件条件和软件版本做相关优化,把一些实践的心得分享出来。
Kernel version : 2.6.32-71.el6.x86_64
Cpu:Intel(R) Xeon(R) CPU E5606 @ 2.13GHz
Memory:8G
Release notes : v0.1 2012-03-31 句柄数 , 网络参数
问题1:句柄数的问题
使用webbench在Linux下做varlish访问压力测试的时候,遇到Socket/File: Can’t open so many files的问题,原因是linux下所有的东西都是文件,包括socket接口,对于大量的网络连接,不仅仅消耗socket文件描述符,对于进程本身还打开相当多的文件,Linux的默认句柄数是1024。
解决方式:
修改/etc/security/limits.conf
你的用户名 soft nofile 65535 ##ulimit -Sn
你的用户名 hard nofile 65535 ##ulimit -Hn
unlimt -n 查看
参考资料:
通过ulimit改善系统性能
问题2:网络参数
使用ab或者webbench做压力测试,如果并发数开到1000的时候,无法完成测试。到晚上查看资料发现是linux网络参数设置。
解决方式:
[longhao@longhao etc]# vi /etc/sysctl.conf
在kernel2.6之前的添加项:
net.ipv4.netfilter.ip_conntrack_max = 655360
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
kernel2.6之后的添加项:
net.nf_conntrack_max = 655360 # net.nf_conntrack_max = 655360 也可以
net.netfilter.nf_conntrack_tcp_timeout_established = 1200
[longhao@longhao etc]# sysctl -p /etc/sysctl.conf
如果报错:error: "net.nf_conntrack_max" is an unknown key 则需要使用modprobe载入ip_conntrack模块,lsmod查看模块已载入。
[longhao@longhao etc]# modprobe ip_conntrack
后续说明:
–CONNTRACK_MAX 允许的最大跟踪连接条目,是在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)
–HASHSIZE 存储跟踪连接条目列表的哈西表的大小
CONNTRACK_MAX和HASHSIZE的默认值
一般来说,CONNTRACK_MAX和HASHSIZE都会设置在“合理”使用的值上,依据可使用的RAM的大小来计算这个值。
CONNTRACK_MAX的默认值
在i386架构上,CONNTRACK_MAX = RAMSIZE (以bytes记) / 16384 =RAMSIZE (以MegaBytes记) * 64,因此,一个32位的带512M内存的PC在默认情况下能够处理512*1024^2/16384 = 512*64 = 32768个并发的netfilter连接。
但是真正的公式是:CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (x / 32) 这里x是指针的bit数,(例如,32或者64bit)
请注意:
-默认的CONNTRACK_MAX值不会低于128
-对于带有超过1G内存的系统,CONNTRACK_MAX的默认值会被限制在65536(但是可以手工设置成更大的值)
HASHSIZE的默认值
通常,CONNTRACK_MAX = HASHSIZE * 8。这意味着每个链接的列表平均包含8个conntrack的条目(在优化的情况并且CONNTRACK_MAX达到的情况下),每个链接的列表就是一个哈西表条目(一个桶)。
在i386架构上,HASHSIZE = CONNTRACK_MAX / 8 =RAMSIZE (以bytes记) / 131072 = RAMSIZE (以MegaBytes记) * 8。举例来说,一个32位、带512M内存的PC可以存储512*1024^2/128/1024 =512*8 = 4096 个桶(链接表)
但是真正的公式是:HASHSIZE = CONNTRACK_MAX / 8 = RAMSIZE (以bytes记) / 131072 / (x / 32)这里x是指针的bit数,(例如,32或者64bit)
请注意:
-默认HASHSIZE的值不会小于16
-对于带有超过1G内存的系统,HASHSIZE的默认值会被限制在8192(但是可以手工设置成更大的值)
分享到:
相关推荐
此文件是linux内核,有兴趣的朋友可以下载看一看,希望没重复的
3882页Linux Kernel Documentation; Linux Kernel官方文档
Linux Kernel Development details the design and implementation of the Linux kernel, presenting the content in a manner that is beneficial to those writing and developing kernel code, as well as to ...
Linux Kernel Development.pdf Linux Kernel Development.pdf Linux Kernel Development.pdf
=> 延时 该概念是从应用负载的角度出发:Application ▹Libraries▹System Call▹Linux Kernel ▹Drive 与之对应的是系统资源视角出发 :Drive▹Linux Kernel ▹System Call ▹Libraries ▹Application 性能指标的...
The Linux kernel is one of the most interesting yet least understood open-source projects. It is also a basis for developing new kernel code. That is why Sams is excited to bring you the latest Linux ...
Linux kernel development 3rd edition, the classic good book
Linux Kernel Programming Guide.pdf
Linux Kernel核心中文手册Linux Kernel核心中文手册Linux Kernel核心中文手册Linux Kernel核心中文手册Linux Kernel核心中文手册Linux Kernel核心中文手册
Understanding the Linux Kernel 3rd Edition (English Version)
Professional Linux Kernel Architecture
Linux Kernel in a Nutshell Linux Kernel in a Nutshell
Linux Kernel 四库全书,进阶学习Linux内核必备推荐书
Linux Kernel 说明第三版,包括内存管理、进程、信号、文件系统等等相关说明
linux kernel
linux Kernel 2.4 Internalslinux Kernel 2.4 Internalslinux Kernel 2.4 Internals
Linux Kernel主要新特性包括:合并了来自Android项目的内核代码,支持新的架构TI C6X,改进了Btrfs文件系统的balance操作、新的除错工具和RAID restripping;新的虚拟网络交换机Open vSwitch。Linux Kernel更快更具...
Linux Kernel Hackers' Guide Due to the fact that nearly every post to this site recently has been either by rude cracker- wannabes asking how to break into other people's systems or a request for ...