一.如何增大service进程的max open files
ulimit -n 只能改小max open files,不能改大。需要按照以下步骤:
- 修改/etc/security/limits.conf文件,将"soft nofile 655360"和"hard nofile 655360"这两行的655360改成期望的值
- 退出,重新ssh该机器(否则无效)
- 修改对service的启动脚本,增加"ulimit -n 950000",其中950000是期望改变的值
- 重启service进程(否则无效),通过"cat /proc/pid/limits"查看是否生效,其中pid是service的进程id
- 可以通过"cat /proc/sys/fs/file-max"查看系统允许的最大的max open files
二.如何修改系统的tcp端口限制
- 通过"cat /proc/sys/net/ipv4/ip_local_port_range"可以查看系统设置的可用端口
- 在/etc/sysctl.conf中增加"net.ipv4.ip_local_port_range = 1024 65000"这一行,执行"sysctl -p",若不报错则成功
- 再次通过"cat /proc/sys/net/ipv4/ip_local_port_range"可以查看系统设置的可用端口是否生效
三.测试方法
- 加强对测试系统的了解。例如:由于对系统的某些限制不了解造成测试方法错误,结果不可取。(同一级目录下不允许创建百万个文件)
- 复现问题,尽量模拟用户的用法。例如:协程or物理线程。
- 打破常规假设:理论判断不会走到的分支,则没有测试,链接数异常,则可能是走到了理论判断不会走到分支;
- Little's law法则:pthread_create并不是创建的线程越多越好,看测试重点,针对此问题,开几个线程,每个线程多干活即可达到期望的高链接数;
N = X * E[T] ,N就是你的压力器线程数,X是IOPS ,E[T]是平均处理时间
压不上去两个原因 1) N太小 2) E[T]太大 - 测试观察项。期望压力持续一个状态,而非瞬间状态,保证链接不复用且不释放或释放后立即重连。
- 测试性能结果,需要符合用户的用法。例如:QPS、Latency等,不要提供给用户一个用户不需要的性能报告。
- 善用工具。例如:能复用尽量复用,减少重复的无用功。多积累学习一些工具,较少工作量。
用户:我想要一辆跑得很快的马车。
重点是“快”,而不是“马车”。
参考:
Linux下高并发socket最大连接数