3、nginx排错
nginx排错
2021.1.1-TS:nginx 报错文件描述符不够,返回了 500 错误码(仅收藏)
报错现象
网站第一次事故:网站上线 10 分钟就挂了,原因是我没有调大 nginx 的 worker 进程的文件描述符,导致有大量客户端访问的时候,nginx 报错文件描述符不够,返回了 500 错误码。
来自:
小林coding
为什么会有 500 错误?
收到大家反馈的错误后,我马上就去服务器查看 nginx 的 error 日志了,发现频繁 报错了这个错误:“Too many open files”。
很快我就知道是文件描述符受限而导致 nginx 频繁报这个错误,每一个 TCP 连接都会占用一个文件描述符,当时发文不到 10 分钟,文章阅读就已经 1000 多了,瞬间一下子 1000 多个请求过来,就导致文件描述符被占满了,从而 nginx 就回 500 错误。
解决办法
所以,要解决这个问题,就要调大文件描述符的显示。
首先,先来看看系统的最大描述符数:
这个是默认值,有 18 万个,那肯定不是这里受限。
然后,通过 ulimit -n 查看每个用户的最大描述符数:
这个也是默认值,也有 6.5 万个,说明也不是这里受限。
然后,通过 /proc//limits 这个文件查看 nginx 工作进程的最大描述符数:
可以看到,最大值才 1024 个!猜测 nginx 工作进程的最大描述符数太小而导致 nginx 报 Too many open files 的错误。
要怎么调大 nginx 的工作进程的最大描述符数呢?
很简单,只需要在 nginx.conf 配置调大 worker_rlimit_nofile 的值,这个参数单跟每个工作进程可以建立的最大连接数量息息相关,我这里调大到了 65535。
然后重新 reload nginx 的配置,再查看 /proc//limits:
可以看到,nginx 的工作进程最大描述符已经设置为 65535。
调大 nginx 工作进程最大描述符后,nginx 的 error 日志就没有在报错了,至此 500 错误的问题就解决了。
2023.12.31-TS-nginx提供的http web服务浏览器界面显示中文为乱码(已解决)
- 故障环境
centos7.9
nginx version: nginx/1.20.1