Kor*_*men 11 cpu socks node.js
我有一个我在NodeJS中编写的SOCKS5代理服务器.我正在利用本机net
和dgram
库来打开TCP和UDP套接字.
它工作正常约2天,所有CPU最大约30%.在没有重新启动的情况下2天后,一个CPU达到100%.之后,所有CPU轮流并一次保持100%的CPU.
我正在使用Cluster来创建实例,例如:
for (let i = 0; i < Os.cpus().length; i++) {
Cluster.fork();
}
Run Code Online (Sandbox Code Playgroud)
这是strace的输出,而cpu是100%:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.76 0.294432 79 3733 epoll_pwait
0.10 0.000299 0 3724 24 futex
0.08 0.000250 0 3459 15 rt_sigreturn
0.03 0.000087 0 8699 write
0.01 0.000023 0 190 190 connect
0.01 0.000017 0 3212 38 read
0.00 0.000014 0 420 close
0.00 0.000008 0 612 180 recvmsg
0.00 0.000000 0 34 mmap
0.00 0.000000 0 16 ioctl
0.00 0.000000 0 190 socket
0.00 0.000000 0 111 sendmsg
0.00 0.000000 0 190 bind
0.00 0.000000 0 482 getsockname
0.00 0.000000 0 218 getpeername
0.00 0.000000 0 238 setsockopt
0.00 0.000000 0 432 getsockopt
0.00 0.000000 0 3259 104 epoll_ctl
------ ----------- ----------- --------- --------- ----------------
100.00 0.295130 29219 551 total
Run Code Online (Sandbox Code Playgroud)
并且节点配置文件结果(重磅):
[Bottom up (heavy) profile]:
Note: percentage shows a share of a particular caller in the total
amount of its parent calls.
Callers occupying less than 1.0% are not shown.
ticks parent name
1722861 81.0% syscall
28897 1.4% UNKNOWN
Run Code Online (Sandbox Code Playgroud)
由于我只使用本机库,因此我的大多数代码实际上都是在C++上运行而不是JS.所以我要做的任何调试都是在v8引擎中.以下是节点分析器(用于语言)的摘要:
[Summary]:
ticks total nonlib name
92087 4.3% 4.5% JavaScript
1937348 91.1% 94.1% C++
15594 0.7% 0.8% GC
68976 3.2% Shared libraries
28897 1.4% Unaccounted
Run Code Online (Sandbox Code Playgroud)
我怀疑它可能是正在运行的垃圾收集器.但我增加了Node的堆大小,内存似乎在范围内.我真的不知道如何调试它,因为每次迭代大约需要2天.
任何人有类似的问题,并成功调试它?我可以使用任何我能得到的帮助.
几个月前,我们意识到在同一机器上运行的另一个跟踪开放套接字的服务导致了这个问题。该服务是一个旧版本,一段时间后,它在跟踪套接字时会导致 CPU 峰值。将服务升级到最新版本解决了 cpu 问题。
经验教训:有时不是你,而是他们
归档时间: |
|
查看次数: |
1785 次 |
最近记录: |