Ruby 2.0 wprowadza przyjazny dla śmieci sposób na przechowywanie śmieci. Wydaje się, że moje procesy utrzymują pamięć współużytkowaną przez więcej niż kilka minut - wydaje się, że dość szybko przenosi się z shared_dirty na private_dirty.Jak poprawić współużytkowanie pamięci między procesami jednorożca z Ruby 2.0 na Linuksie
Niektórzy inni mieli sukces uzyskiwanie to do pracy:
- https://gist.github.com/kenn/5105175
- http://marianposaceanu.com/articles/on-ruby-2-0-memory-usage-unicorn-and-heroku
Ten program może być używany do sprawdzania statystyk pamięci w systemie Linux: https://gist.github.com/kenn/5105061
Moje jednorożca konfiguracja: https://gist.github.com/inspire22/f82c77c0a465f1945305
Z jakiegoś powodu moje aplikacje jednorożca, również z preload_app = true, mają znacznie mniej pamięci współdzielonej. Ruby 2.0-p195, szyny 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
Jeśli shutdown proces mistrz całości (a nie tylko HUP), a następnie uruchomić go ponownie i natychmiast sprawdzić pracownika zanim jakiekolwiek wnioski zostały w kolejce, ja lepiej historię:
[[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
Ale w ciągu 5 sekund od chwili rozruchu, są one z powrotem do ~ 20 MB shared_clean + shared_dirty.
Podejrzewałem, że przyczyną problemu może być zamiana, ale po obniżeniu swapalności i upewnieniu się, że ani proces macierzysty, ani potomny nie zostaną zamienione (przy użyciu metody swapstats.rb), problem będzie nadal występował.
Nie rozumiem dokładnie, czym jest shared_dirty i jak zmienia się w pamięć prywatną. Chciałbym również sugestie dotyczące poprawy długowieczności i ilości mojej wspólnej pamięci. Dzięki!
Nadal nie mam na to rozwiązania. Teraz uważam, że jest to problem a) 32-bitowej wersji Linuksa, oraz b) środowiska o ograniczonej pamięci (choć nawet przy odrzuconej swapie nadal występuje) – Kevin
Mam ten komentarz od autora istotki: https: // świergot.com/kenn/status/402832587007086592 –
niesamowite, dziękuję :) – Kevin