2017-04-18 3 views
0

Ich habe eine Rails 4 App auf Digital Ocean mit Ubuntu 14.04.5 LTS eingesetzt. Die App scheint gut zu laufen, aber das System läuft ständig mit 95% Speicher. Ich habe den Tropfen sogar verdoppelt, um den RAM zu verdoppeln, und er ist immer noch bei 95%.Rails App Sidekiq hohe Speicherauslastung

Hier ist meine Top-Leistung:

top - 11:03:54 up 8:37, 1 user, load average: 0.00, 0.03, 0.05 
Tasks: 118 total, 1 running, 117 sleeping, 0 stopped, 0 zombie 
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 
KiB Mem: 2049956 total, 1980616 used, 69340 free,  8708 buffers 
KiB Swap: 1048572 total, 1036928 used, 11644 free. 47864 cached Mem 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM  TIME+ COMMAND                                        
7510 ubuntu 20 0 780436 274428 2540 S 0.0 13.4 0:27.66 ruby                                         
1313 root  20 0 1921472 250948 2700 S 0.0 12.2 1:42.70 bundle                                         
1315 root  20 0 1876992 246204 2664 S 0.0 12.0 1:44.10 bundle                                         
1359 root  20 0 1928636 236168 2692 S 0.0 11.5 1:42.58 bundle                                         
6408 ubuntu 20 0 781764 175368 2244 S 0.3 8.6 1:10.81 ruby                                         
8681 ubuntu 20 0 984140 156708 1884 S 0.3 7.6 1:37.95 ruby                                         
8810 ubuntu 20 0 646824 117356 2548 S 0.0 5.7 0:11.07 ruby                                         
8821 ubuntu 20 0 646920 112728 2532 S 0.0 5.5 0:11.48 ruby                                         
8797 ubuntu 20 0 646728 82372 2960 S 0.0 4.0 0:14.33 ruby                                         
1932 ubuntu 20 0 332292 56948 1552 S 0.0 2.8 0:04.88 ruby 

Ich weiß, es gibt Unmengen von Blog-Posts usw. auf Schienen App Speicheroptimierung. Die 3 Bündelprozesse verwirren mich. Meine App (eigentlich 2 Apps - eine Produktion und eine Staging) verwendet Redis/Sidekiq, die die Bündelprozesse sind. Also meine Frage (n) sind:

1) Ist das "normal"?

2) Wenn nicht, gibt es eine Möglichkeit, mit der Fehlersuche zu beginnen?

UPDATE

ist die Top-Leistung:

[email protected]:~$ ps aux --sort=-%mem 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root  1291 8.8 9.4 846856 194624 ?  Sl 18:04 0:23 sidekiq 4.2.10 production [0 of 3 busy]                     
root  1411 8.9 9.4 846824 194532 ?  Sl 18:04 0:24 sidekiq 4.2.10 production [0 of 3 busy]                     
root  1272 9.1 9.4 712752 193516 ?  Sl 18:04 0:24 sidekiq 4.2.10 staging [0 of 1 busy]                     
ubuntu 2254 0.6 9.3 645792 192648 ?  Sl 18:05 0:01 Passenger RubyApp: /home/ubuntu/production/current/public (production) 
ubuntu 1986 0.6 9.3 645048 192064 ?  Sl 18:05 0:01 Passenger RubyApp: /home/ubuntu/staging/current/public (staging) 
ubuntu 1762 9.8 9.2 375520 190264 ?  Sl 18:04 0:24 Passenger AppPreloader: /home/ubuntu/production/current 
ubuntu 1678 9.5 9.2 374872 189588 ?  Sl 18:04 0:25 Passenger AppPreloader: /home/ubuntu/staging/current  
ubuntu 2082 0.2 9.1 645144 187524 ?  Sl 18:05 0:00 Passenger RubyApp: /home/ubuntu/staging/current/public (staging) 
ubuntu 1839 2.9 3.9 197300 79976 ?  Sl 18:04 0:06 Passenger AppPreloader: /home/ubuntu/landing/current  
ubuntu 1962 0.1 3.8 332292 78720 ?  Sl 18:05 0:00 Passenger RubyApp: /home/ubuntu/landing/current/public (production) 
ubuntu 1969 0.0 3.7 332388 76044 ?  Sl 18:05 0:00 Passenger RubyApp: /home/ubuntu/landing/current/public (production) 

ich vergaß ich 2 Produktionsarbeiter auf dem Server und 1 Staging haben. Ich hatte Nebenläufigkeit bei 5 und 2, aber dann habe ich das auf 3 und 1 gesenkt. Alles, was Sidekiq macht, ist eine Low-Level-Upload-Bildverarbeitung und Bulk-Record-Kreationen, aktualisiert und löscht, dass ich nicht möchte, dass der Benutzer rumsitzt und auf einen wartet Seite laden auf.

Ich sehe es jetzt bei 80% ausgleichen. Besser, aber immer noch hoch. Ich denke, das nächste wird viele Code-Optimierung usw. Ich bin sicher, ich habe viele Dinge, die ich hier finden kann.

+0

Können Sie die Ausgabe von 'Post ps au --sort = -% mem'? Das wird den kompletten Befehl anzeigen und bestätigen, was diese Bündelprozesse tatsächlich aufrufen. Kannst du auch die "Top" -Ausgabe deines vorherigen Tröpfchens veröffentlichen? Es wird helfen, beide Ausgänge zu vergleichen. – Gaston

+0

Ich vermute, du meintest 'ps aux --sort = -% mem' –

Antwort

0

Es gibt viele Gründe, warum Ihr Ruby-Prozess zu viel Speicher verbraucht. Jeder Edelstein oder App-Code kann eine beliebige Menge an Speicher zuweisen, so dass es im Allgemeinen unmöglich ist, dass SO Ihnen sagt, warum. Hier ist ein möglicher Grund:

https://github.com/rails/rails/issues/27002#issuecomment-260086170

+0

Danke Mike - Ich weiß, ich habe viele saubere/Refactoring etc. zu tun, die ich sicher helfen werde. –

1

im Auge behalten, wie viele Sidekiq Prozesse tun Sie laufen, was ist die konfigurierte Gleichzeitigkeit, die Abfrage und auch die Anzahl der Warteschlangen Sie verwenden. Eine hohe Anzahl von diesen kann zu hoher Speicherauslastung führen. Sie können diese Werte in Ihrem sidekiq.yml optimieren und testen, wie sie sich auf Ihre Umgebung auswirken.

Für weitere Informationen: https://github.com/mperham/sidekiq/wiki/Advanced-Options

+0

Das ist die beste Antwort - mein Code wird das bewirken, aber die Nebenläufigkeit war die mit Abstand größte. Danke –

+0

Hmmmm ... WTH. Es fiel sofort auf 80%, aber langsam kletterte es wieder auf 95% –

Verwandte Themen