03 服务器
【强制】 调用远程操作必须有超时设置。
说明
类似于 HttpClient 的超时设置需要明确配置 Timeout。很多系统故障都源于未设置超时时间,导致请求阻塞和资源浪费。
【推荐】 客户端应为远程接口方法设置具体的超时时间(单位:毫秒)。超时设置的生效顺序一般为:
- 客户端特殊方法(Special Method);
- 客户端接口级别;
- 服务端特殊方法(Special Method);
- 服务端接口级别。
【推荐】 高并发服务器建议调小 TCP 协议的
time_wait超时时间。说明
操作系统默认 240 秒后才会关闭处于
time_wait状态的连接。在高并发情况下,过多的time_wait状态连接可能阻塞新连接的建立。因此,建议在服务器上通过修改/etc/sysctl.conf文件来调整此值。正例
在 Linux 服务器上,可将
net.ipv4.tcp_fin_timeout的值设置为 30 秒。【推荐】 增加服务器支持的最大文件句柄数(File Descriptor, FD)。
说明
主流操作系统将 TCP/UDP 连接管理方式与文件类似,即一个连接对应一个 FD。Linux 服务器默认支持的最大 FD 数量为 1024,在高并发环境下,这个限制容易导致“open too many files”错误,从而阻止新的连接建立。建议根据服务器内存大小将最大 FD 数量调高数倍。
【推荐】 为 JVM 环境设置
-XX:+HeapDumpOnOutOfMemoryError参数,以便在发生 OOM 时输出 dump 信息。说明
OOM 错误的发生往往是随机且难以预测的,可能数月才出现一次。出错时的堆内信息对于问题的诊断和解决非常有帮助。
【推荐】 在线上生产环境中,JVM 的
Xms和Xmx设置应为相同大小,以避免在 GC 后因堆大小调整带来的额外压力。【推荐】 了解每个服务的平均耗时,可以通过独立配置线程池,将较慢的服务与主线程池隔离,防止不同服务的线程互相影响导致系统崩溃。
【参考】 服务器内部重定向必须使用
forward;外部重定向地址应使用 URL Broker 生成。否则因线上采用 HTTPS 协议而导致浏览器提示“不安全”。此外,还会带来 URL 维护不一致的问题。