Ruby 2.0 introduit une copie sur écriture amical garbage collector. Mon processus ne semblent pas garder la mémoire partagée pour plus de quelques minutes -, il semble se déplacer de shared_dirty à private_dirty assez rapidement.
Certains autres ont eu du succès se présente au travail:
- https://gist.github.com/kenn/5105175
- http://marianposaceanu.com/articles/on-ruby-2-0-memory-usage-unicorn-and-heroku
Ce programme peut être utilisé pour contrôler la mémoire des statistiques sur Linux: https://gist.github.com/kenn/5105061
Ma licorne de configuration: https://gist.github.com/inspire22/f82c77c0a465f1945305
Pour une raison quelconque, mon licorne applications, également avec preload_app=true, ont beaucoup moins de mémoire partagée. Ruby 2.0-p195, rails 3.2, linux 2.6.18 (centos)
[root@thorn 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
Si j'ai arrêté le processus maître entièrement (et pas seulement un signal HUP) puis de le redémarrer et vérifier immédiatement un travailleur, avant toute demande de file d'attente, je reçois une meilleure histoire:
[root@thorn 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
Mais dans les 5 secondes qui suivent la mise en place, ils sont de retour à ~20 mo de shared_clean+shared_dirty.
Je soupçonne que la permutation pourrait être la cause du problème, mais après l'abaissement de swappiness et faire en sorte que ni les parents, ni les enfants les processus qui sont échangés (en utilisant swapstats.rb), le problème persiste.
Je ne comprends pas exactement ce que shared_dirty de la mémoire est, et comment il est transformé en mémoire privée. J'aimerais également des suggestions pour améliorer la longévité et le montant de mon mémoire partagée. Merci!