系统调优

禁用Swap

Swap 是虚拟内存的一个功能,在已经PC配置不高的年代很好用,在现在虚拟内存会导致IO以及CPU变的缓慢和浪费;好在大多数服务系统都是默认禁用的

  1. # 临时关闭立即生效;重启失效
  2. sudo swapoff -a
  3. # 永久关闭;重启生效
  4. #
  5. # 授权
  6. sudo mount -n -o remount,rw /
  7. # 修改 /etc/fstab;在swap分区这行前加 # 禁用掉
  8. vi /etc/fstab
  9. # -------
  10. # 开启
  11. sudo swapon -a

设置更多的文件句柄

主流的 Linux 服务器默认所支持最大 fd 数量为 1024,当并发连接数很大时很容易因为 fd 不足而出现“open too many files”错误,导致新的连接无法建立。 PS:建议将 linux 服务器所支持的最大句柄数调高数倍(与服务器的内存数量相关)

查看

  1. # 当前用户限制的数量
  2. ulimit -a
  3. ulimit -n
  4. # 单个进程级别限制的数量
  5. cat /proc/sys/fs/nr_open
  6. # 系统级别 (所有进程打开的不能超过)
  7. cat /proc/sys/fs/file-max
  8. # 查看某个进程锁存在的FD
  9. lsof -n | grep [PID] -c
  10. # 查看每个用户已用FD
  11. ps h -Led -o user | sort | uniq -c | sort -n


修改

  1. # 当前用户(会话)
  2. ulimit -n 65535
  3. # 修改limits.conf文件 永久生效
  4. # ------
  5. # 限制用户进程的数量对于linux系统的稳定性非常重要
  6. # soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错
  7. #* soft core 0
  8. #* hard rss 10000
  9. #@student hard nproc 20
  10. #@faculty soft nproc 20
  11. #@faculty hard nproc 50
  12. #ftp hard nproc 0
  13. #@student - maxlogins 4
  14. vim /etc/security/limits.conf
  15. # 添加内容
  16. # *任何用户可以打开的最大的文件描述符数量,默认1024,这里的数值会限制tcp连接
  17. * soft nofile 655350
  18. * hard nofile 655350
  19. # *任何用户可以打开的最大进程数
  20. * soft nproc 655350
  21. * hard nproc 650000
  22. # @student 用户分组
  23. @student hard nofile 65535
  24. @student soft nofile 4096
  25. #学生组中的任何人不能拥有超过50个进程,并且会在拥有30个进程时发出警告
  26. @student hard nproc 50
  27. @student soft nproc 30
  28. # ------
  29. # ------
  30. # 修改全局系统的FD
  31. vim /etc/sysctl.conf
  32. fs.file-max = 6553600
  33. # 立即刷新
  34. sysctl -p
  35. # ------
  36. #
  37. # 修改单个进程的FD
  38. vim /etc/sysctl.conf
  39. fs.nr_open=10240000
  40. # 立即刷新
  41. sysctl -p
  42. # ------


网络调优(必须的)

TCP 调优

设置较短的超时时间

  1. # 修改 /etc/sysctl.conf
  2. vi /etc/sysctl.conf
  3. # 新增或修改
  4. net.ipv4.tcp_fin_timeout = 30
  5. # 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  6. net.ipv4.tcp_syncookies = 1
  7. # 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  8. net.ipv4.tcp_tw_reuse = 1
  9. # 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
  10. net.ipv4.tcp_tw_recycle = 1
  11. # 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
  12. net.ipv4.tcp_fin_timeout = 30
  13. # 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
  14. net.ipv4.tcp_keepalive_time = 1200
  15. # 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
  16. net.ipv4.ip_local_port_range = 1024 65000
  17. # 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  18. net.ipv4.tcp_max_syn_backlog = 8192
  19. # 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。
  20. net.ipv4.tcp_max_tw_buckets = 5000

锁定重要文件

  1. chattr -i /etc/passwd /etc/shoadow /etc/group /etc/gshadow /etc/inittab