nginx因并发量太高,扛不住如何优化

云存储关系型数据库容器

picture.image

nginx报错

nginx服务器访问量非常高,查看nginx的错误日志发现一直输出如下信息

  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)  
2022-02-07 11:53:49 [alert] 13576#0: accept() failed (24: Too many open files)

根据日志输出的信息,我们知道因为打开的文件句柄太多,导致一直报错,那为什么会抱这个错误和如何解决呢?

问题分析过程

从输出日志我们基本能够确定导致nginx发生问题的原因,那是不是因为Nginx本身的问题呢?其实不全是,因为nginx无法打开这么多的文件句柄,首先在配置里我没有配置nginx能够打开的最大文件数,另外一个方面是因为cenots7系统本身对最大文件句柄数有限制,我也没有针对操作系统进行配置最大文件句柄数据,所以不全是Nginx才发生这些异常的。

在centos7服务器中,我们通过如下命令查看服务器默认配置的最大文件句柄数。

picture.image

此时当nginx的连接数超过65536时,nginx的错误日志将会输出如下错误信息。

  
[alert] 13576#0: accept() failed (24: Too many open files)

问题解决方案

临时解决

将打开文件句柄数设置足够大。

  
ulimit -n 655360

picture.image

同时修改nginx的配置文件,配置如下参数,注意:该配置要和error_log同级别。

  
error_log logs/error.log;  
worker_rlimit_nofile 655350;

重启nginx,就可以解决nginx连接过多的问题,nginx就可以支持高并发,同时ulimit -n也会影响mysql的并发连接数,提高该值也会提高mysql的并发。

永久解决问题

如果我们想要让ulimits的数值永久生效,将ulimit命令放入/etc/profile里面或者修改/etc/security/limits.conf配置文件,修改里面的配置值

  
* soft nofile 655360  
* hard nofile 655360

配置参数解释:

星号代表全局,soft为软件,hard为硬件,nofile为这里指可打开的文件句柄数。

注意:如果我们要想让limits.conf文件配置生效,要确保 pam_limits.so文件被加入到启动文件中。查看 /etc/pam.d/login 文件中是否存在如下配置。如果不存在,则需要添加上述配置项。

picture.image

  
session required /lib64/security/pam\_limits.so
0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生机器学习系统落地和实践
机器学习在字节跳动有着丰富业务场景:推广搜、CV/NLP/Speech 等。业务规模的不断增大对机器学习系统从用户体验、训练效率、编排调度、资源利用等方面也提出了新的挑战,而 Kubernetes 云原生理念的提出正是为了应对这些挑战。本次分享将主要介绍字节跳动机器学习系统云原生化的落地和实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论