问题描述
- 关于nginx 出现accept4() failed错误问题
-
nginx作代理,用ab去压的时候(比如:ab -n 100000 -c 100000),没过多久ab反馈拒绝连接了,然后看到任务管理器中有一个nginx进程一直占用着CPU(如果是双核就占50%,换了一台8核的,就占用12%左右),错误日志猛增,内容都是2015/01/28 10:43:22 [alert] 11180#0: accept4() failed (22: Invalid argument) 这样的,若把ab的并发请求改小一些,可以通过。
想请问一下
1.出这样错的时候,是不是说nginx承受不住了,需要调优
2.出错后,服务就一直拒绝访问,错误日志也一直增加,等了很久都没有停下来,只有重启nginx才行,这种情况正常吗,感觉好像是nginx处理出现死循环了一样另外我是在windows下跑的nginx
感谢所有回答我的朋友,我再补充说明一下,以上是我用ab测试的情况,这个并发量大nginx承受不了,我可以理解,我只是觉得在ab测试结束后,已经没有访问了,上面说的错误情况还是一直都有,没有消失,只能重启nginx,这点很影响实际应用。
实际应用中现象是,nginx正常启动,一切都正常,访问量也不大,50个人不到,并发量也不大,在经过一段时间后,会突然出现上面报错的情况,其它现象和上面描述的一样,只能重启nginx
解决方案
10w并发,nginx应该抗不住了。需要降低并发了。或者用前段proxy,负载均衡
解决方案二:
accept4是建立连接时的系统调用,虽然ngxin很强大10w并发量还是太大了,实际应用中你的用户量能有多大呢?如果日活不过几十w,那并发数过百基本也就够了。
访问量更大的话,单机nginx肯定扛不住,需要考虑做多机负载均衡。
时间: 2025-01-19 15:33:38