Ubuntu 14.04 数控 100% CPU 使用率

Ubuntu 14.04 nc 100% CPU usage

我正在使用 Ubuntu 14.04 服务器(8 核,16 GB RAM)托管 PHP 网站,MySQL 和 Redis。 PHP web 和 MySQL 的流量非常低(MySQL:平均每秒查询数:0.825)。 Redis 每秒处理 8011 个命令。

今天我注意到 nc 位于 top 的顶部:

8348 root      20   0   11224    764    624 R 100.0  0.0   2277:01 nc                                                                                                                            
8319 root      20   0   11224    760    624 R 100.0  0.0   2277:59 nc                                                                                                                        
8324 root      20   0   11224    764    624 R 100.0  0.0   2278:09 nc                                                                                                                        
8344 root      20   0   11224    760    624 R 100.0  0.0   2277:07 nc

Stracing nc 给出:

root@host:/home/user# strace -p 8348
Process 8348 attached
poll([{fd=3, events=POLLIN}, {fd=-1}], 2, 1000) = 1 ([{fd=3, revents=POLLERR}])
poll([{fd=3, events=POLLIN}, {fd=-1}], 2, 1000) = 1 ([{fd=3, revents=POLLERR}])
poll([{fd=3, events=POLLIN}, {fd=-1}], 2, 1000) = 1 ([{fd=3, revents=POLLERR}])
intentionally cutted N lines from output

快速查找 man poll 给我的信息是 poll waits for one of a set of file descriptors to become ready to perform I/O.

我如何找出文件描述符发生了什么(是文件描述符问题?)并修复 nc 占用 100% CPU?

我们最近遇到了类似的问题。我们有一个 cron 作业,通过 netcat 通过 udp 将一些 redis 统计数据发送到 graphite .它似乎是 netcat 中的错误:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=752931

我们 运行 的命令是这样的:

echo "{redis_metric}" | nc -w 1 -u ${graphite_host} 8125

使用 'quit' 选项 (-q) 而不是 'timeout' 选项 (-w),似乎可以解决我们的问题:

echo "{redis_metric}" | nc -q 1 -u ${graphite_host} 8125

希望对您有所帮助!