During upgrades Bundler uses a lot of memory in relation to the rest of the installation during the assets precompilation. This would hint at some VM object refcount thing not releasing the touched objects (files having been read in?) and thus the GC not firing and doing its job. Most likely this is an artefact of either Bundler itself or the Rails asset pipeline.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3952 1000 20 0 3636888 651740 14836 R 86,8 31,8 2:23.24 bundle
3433 1000 20 0 1681992 190036 4776 S 0,0 9,3 0:05.55 ruby
3403 1000 20 0 1688156 172824 4812 S 0,0 8,4 0:05.95 ruby
3391 1000 20 0 1687128 143528 5100 S 0,0 7,0 0:05.95 ruby
3366 1000 20 0 510236 105780 4528 S 0,3 5,2 0:02.84 ruby
2920 1000 20 0 465132 92584 6804 S 0,0 4,5 0:11.59 ruby
For your consideration to maybe take a deeper look at this, as it is causing annoying shuffling for sysadmins with other processes on servers at upgrade times if the servers are provisioned for the runtime memory requirements.
I figured you would hit this bit of juggling on your hosted services and hoped you would have cooked up a pattern in-house.
If you have a public ticket on an open source component for that at some point, do cross post here - I’m willing to help tackle this (design-side, implementation-side, just general input, metrification, testing).
Otherwise may the UNIX pipe (or Goroutine or equivalent) be with you.
Gibt es Fortschritte bei diesem Problem? Wir sehen, dass 14 GB Speicher zugewiesen werden, wenn eine LEERE Instanz von 3.2.1 erstellt wird, bevor ihr der Speicher ausgeht und sie abstürzt.
Könnten Sie in diesem Fall die Ausgabe von vmstat 5 teilen? Wenn Sie sich ps oder top ansehen, sehen Sie möglicherweise etwas anderes als den belegten Speicher. Allokierter Speicher ist nicht so wichtig, wenn er nicht verwendet wird.
Zum Beispiel sehe ich in der ps-Ausgabe VSZ und RSS. Mir ist RSS wichtig.
In top sehe ich dasselbe, aber es heißt VIRT und RES
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2284 ddiscou+ 25 5 5246644 327496 5640 S 1.7 16.4 872:50.70 ruby
2294 ddiscou+ 20 0 5126600 364284 14436 S 0.7 18.3 91:00.13 ruby
vmstat sagt mir, wie hoch der Speicherdruck gerade ist – wie viel Swap verbleibt, wie viel freier Speicher und Puffer-Speicher vorhanden ist, und am wichtigsten, ob es Swap-In gibt (die Spalte si).
root@ubuntu-2gb-nbg1-1:~# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 239616 127080 185428 464448 0 0 14 32 4 2 2 1 97 0 0
0 0 239616 124584 185432 464500 0 0 0 13 138 318 2 2 96 0 0
0 0 239616 126120 185436 464500 0 0 0 13 116 264 1 0 99 0 0
0 0 239616 120376 185436 464504 0 0 0 46 125 322 3 2 95 0 0
0 0 239616 123448 185436 464504 0 0 0 73 129 306 1 1 98 0 0