最近,在服务器上搭建了一套压测环境,不为别的,就为压测下Nginx的性能,到底有没有传说中的那么牛逼!具体环境为:11台虚拟机,所有安装CentOS 6.8 64位操做系统,1台安装部署Nginx,其余10台做为客户端同时以压满CPU的线程向Nginx发送请求,对Nginx进行压测。没想到,出现问题了!!nginx
Nginx服务器访问量很是高,在Nginx的错误日志中不停的输出以下错误信息。面试
2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
根据错误日志的输出信息,咱们能够看出:是打开的文件句柄数太多了,致使Nginx报错了!那咱们该如何解决这个问题呢?shell
既然咱们可以从Nginx的错误日志中基本可以肯定致使问题的缘由,那这究竟是不是Nginx自己的问题呢?答案为:是,也不全是!vim
为啥呢?缘由很简单:Nginx没法打开那么多的文件句柄,一方面是由于我没有配置Nginx可以打开的最大文件数;另外一方面是由于CentOS 6.8操做系统自己对打开的最大文件句柄数有限制,我一样没有配置操做系统的最大文件句柄数。因此说,不全是Nginx的锅!在某种意义上说,我错怪Nginx了!设计模式
在CentOS 6.8服务器中,咱们能够在命令行输入以下命令来查看服务器默认配置的最大文件句柄数。bash
[root@binghe150 ~]# ulimit -n 1024
能够看到,在CentOS 6.8服务器中,默认的最大文件句柄数为1024。服务器
此时,当Nginx的链接数超过1024时,Nginx的错误日志中就会输出以下错误信息。微信
[alert] 13576#0: accept() failed (24: Too many open files)
那咱们该如何解决这个问题呢?其实,也很简单,继续往下看!session
使用以下命令能够把打开文件句柄数设置的足够大。并发
ulimit -n 655350
同时修改nginx.conf , 添加以下配置项。
worker_rlimit_nofile 655350;
注意:上述配置须要与error_log同级别。
这样就能够解决Nginx链接过多的问题,Nginx就能够支持高并发(这里须要配置Nginx)。
另外, ulimit -n
还会影响到MySQL的并发链接数。把它提升,也能够提升MySQL的并发。
注意: 用 ulimit -n 655350
修改只对当前的shell有效,退出后失效。
若要令修改ulimits的数值永久生效,则必须修改配置文件,能够给ulimit修改命令放入/etc/profile里面,这个方法实在是不方便。
还有一个方法是修改/etc/security/limits.conf配置文件,以下所示。
vim /etc/security/limits.conf
在文件最后添加以下配置项。
* soft nofile 655360 * hard nofile 655360
保存并退出vim编辑器。
其中:星号表明全局, soft为软件,hard为硬件,nofile为这里指可打开的文件句柄数。
最后,须要注意的是:要使 limits.conf 文件配置生效,必需要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中是否存在以下配置。
session required /lib64/security/pam_limits.so
不存在,则须要添加上述配置项。
关注「 冰河技术 」微信公众号,后台回复 “设计模式” 关键字领取《深刻浅出Java 23种设计模式》PDF文档。回复“Java8”关键字领取《Java8新特性教程》PDF文档。
好了,今天就聊到这儿吧!别忘了点个赞,给个在看和转发,让更多的人看到,一块儿学习,一块儿进步!!
若是你以为冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!很多读者已经经过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有很多读者实现了技术上的飞跃,成为公司的技术骨干!若是你也想像他们同样提高本身的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,天天更新超硬核技术干货,让你对如何提高技术能力再也不迷茫!