阿里巴巴设计规约-服务器

  1. 【推荐】 高并发服务器建议调小 TCP 协议的 time_wait 超时时间。
    说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服务器端会因为
    处于 time_wait 的连接数太多,可能无法建立新的连接,所以需要在服务器上调小此等待值。
    正例:在 linux 服务器上请通过变更/etc/sysctl.conf 文件去修改该缺省值(秒):
    net.ipv4.tcp_fin_timeout = 30

没有写,默认会是240.


  1. 【推荐】 调大服务器所支持的最大文件句柄数(File Descriptor,简写为 fd)。
    说明:主流操作系统的设计是将 TCP/UDP 连接采用与文件一样的方式去管理,即一个连接对应于一个
    fd。 主流的 linux 服务器默认所支持最大 fd 数量为 1024,当并发连接数很大时很容易因为 fd 不足而出现
    “open too many files” 错误,导致新的连接无法建立。 建议将 linux 服务器所支持的最大句柄数调高数
    倍(与服务器的内存数量相关)。
    在linux下用命令查询:发现是open files (-n) 1024
root@ubuntu2015251:~# 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) 63694
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63694
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
root@ubuntu2015251:~# 

如何调大?
默认情况下,linux最大文件句柄数为1024个。当你的服务器在大并发达到极限时,就会报出“too many open files”。

那么如何修改linux最大文件句柄数呢?其实很简单:

1、ulimit -n 2048

这命令就可以修改linux最大文件句柄数,修改以后使用ulimit -a 查看修改的状态,如:

但是,这种方法只针对当前进程有效。重新打开一个shell或者开启一个进程,你就会发现参数还是ulimit -n xx修改之前的数字。那么有没有一劳永逸的方法呢?

当然有!那就是修改系统参数。

2、修改linux系统参数。vi /etc/security/limits.conf 添加

*  soft  nofile  65536

*  hard  nofile  65536

修改以后保存,注销当前用户,重新登录,执行ulimit -a ,ok ,参数生效了:


  1. 【推荐】 给 JVM 环境参数设置-XX:+HeapDumpOnOutOfMemoryError 参数,让 JVM 碰到
    OOM 场景时输出 dump 信息。
    说明:OOM 的发生是有概率的,甚至相隔数月才出现一例,出错时的堆内信息对解决问题非常有帮助。

  1. 【推荐】 在线上生产环境,JVM 的 Xms 和 Xmx 设置一样大小的内存容量,避免在 GC 后调整
    堆大小带来的压力。

发布了331 篇原创文章 · 获赞 51 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/y41992910/article/details/95314088