2015-04-23 11 views
5

Ich benutze Ubuntu 14.04 Server (8 Kerne, 16 GB RAM) zum Hosten einer PHP-Website, MySQL und Redis. PHP Web und MySQL hat sehr wenig Verkehr (MySQL: Abfragen pro Sekunde Durchschnitt: 0,825). Redis verarbeitet 8011 Befehle pro Sekunde.Ubuntu 14.04 nc 100% CPU-Auslastung

Heute habe ich bemerkt, dass nc in der Spitze top bleibt:

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 gibt:

[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 

Eine schnelle Suche auf man poll gibt mir Informationen, dass poll waits for one of a set of file descriptors to become ready to perform I/O.

Wie finde ich heraus, was mit Dateideskriptoren passiert (ist es ein Problem mit Dateideskriptoren?) und fixiere nc, das 100% CPU verbraucht?

Antwort

6

Wir hatten vor kurzem ein ähnliches Problem. Wir haben einen Cron-Job, der über netcat einige redis stats an Graphit über udp schickt, und nachdem wir letzte Woche einen unserer Graphit-Hosts für eine Weile heruntergefahren hatten, bemerkten wir, dass die CPU-Auslastung unserer Redis-Boxen sprunghaft anstieg. Es scheint ein Fehler in netcat zu sein: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=752931

Der Befehl wir war so etwas wie diese ausgeführt wurden:

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

Mit dem 'beenden' Option (-q), im Gegensatz zu dem 'Timeout' Option (-w), scheint das Problem für uns zu beheben:

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

Hoffe, dass hilft!

+0

Vielen Dank mein Anwendungsfall ist genau das gleiche. Dies beantwortet vollständig, wie man nc mit 100% CPU reparieren kann. – Aivaras