在性能测试过程中,我们遇到一个非常棘手的问题,系统的资源使用非常少,但是并发数一旦加上去就开始各种报错,在研究了很多文档后,终于把TPS从100提高到了500.下面是一些在调优过程中的总结。
1.linux系统的限制:
通常没有调优的系统会有一些限制,linux系统级的限制可以通过ulimit -a来查看
[root@localhost bin]# ulimit -a
core file
size (blocks, -c) 0
data seg
size (kbytes, -d) unlimited
scheduling
priority (-e) 0
file
size (blocks, -f) unlimited
pending
signals (-i) 256595
max locked
memory (kbytes, -l) 64
max memory
size (kbytes, -m) unlimited
open
files (-n) 65536
pipe
size (512 bytes, -p) 8
POSIX message
queues (bytes, -q) 819200
real-time
priority (-r) 0
stack
size (kbytes, -s) 10240
cpu
time (seconds, -t) unlimited
max user
processes (-u) 10240
virtual
memory (kbytes, -v) unlimited
file
locks (-x) unlimited
对其中重点的部分进行说明
-n 这是最容易出现问题的地方,默认值为1024,对于linux一切皆文件的宗旨来讲,非常容易出现too many open
file的情况
-u 这是单用户突破1024线程数的关键,事实表明,在修改了配置后,确实突破了1024个线程的限制
还有/etc/security/limits.conf
增加下面2行,可以增加系统对nofile打开的限制
* soft nofile 65536
* hard nofile 65536
ulimit -x 的修改只能保证当然登陆有效,如何让文件打开数永久生效,也是一个很关键的问题,
修改/etc/pam.d/login添加如下一行
session required /lib/security/pam_limits.so
可以使用lsof -p pid|wc
-l 进行验证,文件的打开数可以超过1024的限制了
上面的方法只能保证open file 会实时生效,但是线程数又如何做到呢?
思考,如何让用户做到不用手动输入ulimit- u 呢?
答案是在.barsh_profile中添加ulimit -u ,这样用户就不用在每次登陆的时候再修改了