[故障排插日记]nginx并发过高导致远程客户端无法连接数据库

服务器A: nginx php mysql

服务器B: nginx php

故障现象: 服务器B无法远程连接服务器A的mysql服务(一直等待直至超时),经过排查发现关闭服务器A的nginx后mysql即可正常连接。

排查过程: 1.关闭A的防火墙,发现没什么用 2.查看A的tcp连接,发现有很多time_wait和fin_wait1

netstat -anp | grep ":80"
netstat -anp | grep ":3306"

3.统计80端口连接数

netstat -anp | grep ":80" | wc -l

发现连接数量非常多

4.暂停服务器A的nginx服务,mysql瞬间复活

5.估计是nginx占用了太多的"资源",尝试限制nginx

6.修改nginx.conf,调整 worker_processes 为 1,worker_rlimit_nofile减小到2048,worker_connections减小到2048,重启nginx服务,mysql不再受到影响。

探究原理:

1.文件描述符 修改的nginx参数主要是文件描述符和每worker处理连接数。

cat /proc/sys/fs/file-nr
#5728	0	1615734

查看系统文件描述符状态,第一列表示系统打开的文件描述符,第二个表示已分配但未使用的,第三列表示文件描述符总数

查看nginx打开的文件描述符数量,首先查看nginx进程号

pidof nginx
#6557 6556 6555
ll /proc/6555/fd | wc -l
#17
ll /proc/6556/fd | wc -l
#2000
ll /proc/6557/fd | wc -l
#15

查看系统文件描述符数量限制

ulimit -n
#1024

更多尝试 lsof

还不知道到底要怎么做,先试试ulimit -n 65535吧,nginx疯狂报错:too many open files

后记

最后还是从提高处理速度,减少请求,增加服务器负载均衡等方面处理,系统本身我实在不会优化了。 最后先上了cdn,静态文件合并,请求数量能减少一大半。

转载于:https://my.oschina.net/cxz001/blog/678058

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值