cpu打满,用strace追进程显示大量的epoll_wait,如下:
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2
epoll_wait(3, {{EPOLLOUT, {u32=13, u64=13}}, {EPOLLOUT, {u32=14, u64=14}}}, 32, -1) = 2使用lsof查看如下:
php     44438 root    0u      CHR     136,2       0t0         5 /dev/pts/2 (deleted)
php     44438 root    1w      REG     253,1  99381550    131091 /home/wwwlogs/game_access_log/output.log
php     44438 root    2w      REG     253,1  99381550    131091 /home/wwwlogs/game_access_log/output.log
php     44438 root    3u  a_inode       0,9         0      5833 
php     44438 root    4r     FIFO       0,8       0t0 468987447 pipe
php     44438 root    5w     FIFO       0,8       0t0 468987447 pipe
php     44438 root    6u     IPv4 468987448       0t0       TCP localhost:44329->localhost:dc (ESTABLISHED)
php     44438 root    7u     IPv4 468987449       0t0       TCP localhost:imprs->localhost:29700 (ESTABLISHED)
php     44438 root    8u     IPv4 468987450       0t0       TCP localhost:54917->localhost:29701 (ESTABLISHED)
php     44438 root    9u     IPv4 468987451       0t0       TCP localhost:9610->localhost:29703 (ESTABLISHED)
php     44438 root   10u     IPv4 468987452       0t0       TCP localhost:52219->localhost:29702 (ESTABLISHED)
php     44438 root   11u     IPv4 468989939       0t0       TCP localhost:57926->localhost:11210 (ESTABLISHED)
php     44438 root   12u     IPv4 470778153       0t0       TCP localhost:21543->localhost:mysql (ESTABLISHED)
php     44438 root   13u     IPv4 469339300       0t0       TCP yqgame:30110->www.jump.com:29000 (CLOSE_WAIT)
php     44438 root   14u     IPv4 469356292       0t0       TCP yqgame:31576-
workerman status状态如下:
负载:43.77
Workerman version:3.5.14          PHP version:7.0.22
start time:2018-08-29 15:14:19   run 6 days 21 hours
load average: 43.77, 44, 44      event-loop:\Workerman\Events\Event
5 workers       69 processes
worker_name          exit_status      exit_count
GameBusinessWorker   0                204
GoldCoinMatchService 0                52
FileMonitor          0                0
GameServerGateway    0                0
Register             0                0
看下是不是哪里设置了set_error_hanlder
set_error_hanlder 只有monolog和phpredis存在,和这个有什么关系吗
目前已知的问题是代码里设置了 set_error_hanlder,并且在warning notice等出现时会进入set_error_hanlder设定的函数,如果函数里抛出异常,会导致event扩展行为异常,就是不断的触发epoll_wait,但是不会执行epoll_wait对应的回调