2015-04-23 14 views
5

Utilizzo un server Ubuntu 14.04 (8 core, 16 GB di RAM) per l'hosting di un sito Web PHP, MySQL e Redis. PHP web e MySQL hanno un traffico molto basso (MySQL: query al secondo media: 0.825). Redis elabora 8011 comandi al secondo.Ubuntu 14.04 nc 100% di utilizzo della CPU

Oggi ho notato che nc rimane nella parte superiore del 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 dà:

[email protected]:/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 

Una ricerca rapida su man poll mi dà informazioni che poll waits for one of a set of file descriptors to become ready to perform I/O.

Come scopro cosa sta succedendo ai descrittori di file (è un problema con i descrittori di file?) e corregge nc consumando CPU al 100%?

risposta

6

Abbiamo avuto un problema simile di recente. Abbiamo un cron job che invia alcune statistiche redis alla grafite su udp via netcat, e dopo aver portato giù uno dei nostri host di grafite per un po 'la scorsa settimana, abbiamo notato che l'utilizzo della CPU sulle nostre scatole redis è salito alle stelle. Sembra essere un bug in netcat: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=752931

Il comando correvamo era qualcosa di simile:

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

Utilizzando il 'Quit' opzione (q), l'opzione in contrapposizione al 'timeout' (-w), sembra risolvere il problema per noi:

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

Sperare che aiuti!

+0

Grazie, il mio caso d'uso è esattamente lo stesso. Questo risponde totalmente come riparare nc usando il 100% di CPU. – Aivaras