Ruby 2.0 führt einen auf Copy-on-Write-fähigen Garbage Collector ein. Meine Prozesse scheinen den Speicher nicht länger als ein paar Minuten geteilt zu haben - er scheint sich ziemlich schnell von shared_dirty zu private_dirty zu bewegen.So verbessern Sie die Speicherfreigabe zwischen Unicorn-Prozessen mit Ruby 2.0 unter Linux
Einige andere haben Erfolg bekommen diese arbeiten musste:
- https://gist.github.com/kenn/5105175
- http://marianposaceanu.com/articles/on-ruby-2-0-memory-usage-unicorn-and-heroku
Dieses Programm kann verwendet werden, um Speicherstatistiken auf Linux zu überprüfen: https://gist.github.com/kenn/5105061
Mein Einhorn Konfiguration: https://gist.github.com/inspire22/f82c77c0a465f1945305
Aus irgendeinem Grund haben meine Einhorn-Apps, auch mit preload_app = true, viel weniger gemeinsamen Speicher. Ruby-2.0-p195, Schienen 3.2, Linux 2.6.18 (CentOS)
[[email protected] script]# ruby memstats.rb 4946
Process: 4946
Command Line: unicorn_rails worker[4] -c /u/apps/newap/current/lib/unicorn.rb -E production -D
Memory Summary:
private_clean 0 kB
private_dirty 56,324 kB
pss 60,256 kB
rss 83,628 kB
shared_clean 4,204 kB
shared_dirty 23,100 kB
size 108,156 kB
swap 68 kB
Wenn ich Abschaltung der Master-Prozess vollständig (und nicht nur ein HUP) anschließend neu starten und sofort einen Arbeiter überprüfen, bevor irgendwelche Anforderungen in der Warteschlange haben, ich erhalten eine bessere Geschichte:
[[email protected] script]# ruby memstats.rb 5743
Process: 5743
Command Line: unicorn_rails worker[4] -c /u/apps/newap/current/lib/unicorn.rb -E production -D
Memory Summary:
private_clean 0 kB
private_dirty 21,572 kB
pss 27,735 kB
rss 66,296 kB
shared_clean 2,484 kB
shared_dirty 42,240 kB
size 91,768 kB
swap 0 kB
Aber innerhalb von 5 Sekunden wird in Betrieb genommen, sie zu ~ 20MB shared_clean + shared_dirty sind zurück.
Ich vermutete, dass swapping das Problem verursachen kann, aber nachdem Schwanken verringert und sichergestellt wird, dass weder die Eltern- noch die Kindprozesse ausgelagert werden (mit swapstats.rb), bleibt das Problem bestehen.
Ich verstehe nicht genau, was shared_dirty Speicher ist, und wie es in privaten Speicher verwandelt wird. Ich würde auch gerne Vorschläge zur Verbesserung der Langlebigkeit und Menge meines gemeinsamen Gedächtnisses. Vielen Dank!
Ich habe immer noch keine Lösung für diese. Ich glaube jetzt, es ist ein Problem von a) 32-Bit-Linux-Version, und b) eine Umgebung mit eingeschränktem Speicher (obwohl selbst mit Swappiness abgelehnt immer noch auftritt) – Kevin
Ich habe diesen Kommentar vom Autor des Gist: https: // Twitter.com/kenn/status/402832587007086592 –
genial, danke :) – Kevin