关于processTimeout和processTimeoutHandler的设置问题

0

我在看GatewayWorker手册的时候,看到BusinessWorker类里有关processTimeout和processTimeoutHandler的说明,有几点疑问请教一下大神:


1.我没有在start_businessworker.php里面设置processTimeout,那么默认应该是30秒吧?


2.要实现单次执行时间超过30秒就会记录一条日志到workerman.log,我现在Events.php里面没在文件头部增加declare(ticks=1);语句,是不是要增加一下?


3.我在start_businessworker.php里面也没有设置processTimeoutHandler,那么是不是默认回调Workerman\Worker::log(即记录日志到GatewayWorker/workerman.log),且业务超时后默认执行进程重启操作,不需要我写程序返回假让进程重启吧?


请大神指教一下,多谢。

已邀请:

walkor

赞同来自:

1、对,30秒
2、declare(ticks=1);可以定位到在哪里耗时导致超时,declare(ticks=1);会对性能有点影响,默认不用开启declare(ticks=1);,当出现processTimeout时临时开启,然后reload生效排查问题
3、是的

粥真清

赞同来自:

当时做了修改Gateway和BusinessWorker进程数量,都没有效果。但到第三天再次修改了进程数量后,它逐渐恢复到原来的水平了,真是很崩溃。一直到现在都算稳定在运行。
然后今天出现了短时间TCP连接数增加了1000左右(以前是减少,这次是增多,一般这个时候外面投放的设备已经全部开启了,不应该是突然开启了1000台设备,从TCP连接图可以看出活跃连接数established稳定在7000多),但这也造成1000多台设备掉线,但是这次时间比较短,等客户告知我时,已经恢复了。所以查看php start.php status已经不是当时的情况了。现在贴上来2张图,一张是监控图表里的TCP变化图,一张是目前的status图。


想请教大神的是,有什么原因会造成此种情况?


图片


图片

walkor

赞同来自:

从提供的信息和截图来看很难确定多出来的1000左右连接哪里来的,有可能是共享设备发起的连接,也有可能是服务端调用redis mysql等外部存储建立的连接,有可能网络出现暂时故障引起,也有可能是外部探测程序发起的连接。


不过从你的截图来看系统的负载有点高,top 看下哪些程序在消耗CPU。

粥真清

赞同来自:

结合上面的php start.php status图,可以看出,CPU占用高的几个PID3389,3391等,它们的链接数(connections)一点也不多。

walkor

赞同来自:

感觉是大量通讯导致的cpu使用偏高,status看到gateway17天处理了50亿左右请求,每天处理3亿请求,单服务器每天处理这么多请求算很多了。


sy的cpu占用达到38%,这个偏高,可能是gateway进程开的有点多,进程切换频繁导致,也可能是开了declare(ticks=1)影响。如果开了declare(ticks=1)可以尝试去掉后reload看sy是否有下降,如果是gateway进程数过多导致,可以尝试减少gateway进程数,更改进程数需要restart。



Linux内核优化和event扩展都做了,前面6月底的时候出现过TCP连接突然大量掉线,只剩3000左右维持着



这个可能是因为安装了event扩展优化linux内核后没有restart重启gatewayWorker导致,安装扩展和优化内核reload是无效的,需要restart。 linux内核优化必须严格按照workerman手册 http://doc.workerman.net/appendices/kernel-optimization.html 来做,每一项都不能落下。之前有给其它项目定位无法建立大量连接问题时发现是linux内核优化有一项net.netfilter.nf_conntrack_max没有做导致无法建立大量连接。要想应对大并发,workerman手册中linux内核优化每一项都很重要,切记。

粥真清

赞同来自:

在sysctl.conf文件中新增了:net.netfilter.nf_conntrack_max = 2621440
但是不管运行/sbin/sysctl -p,还是sysctl -p,都提示no such file or directory


这个后来查了资料,运行了lsmod |grep conntrack,以及modprobe ip_conntrack,然后再运行/sbin/sysctl -p就添加上了


图片

粥真清

赞同来自:

把net.ipv4.tcp_tw_recycle改成0,net.ipv4.tcp_max_tw_buckets 改成20000后,TCP监控图


图片

要回复问题请先登录注册