У меня есть эластичная среда beanstalk, на которой запущен сервер nodejs. Я пытаюсь измерить использование памяти, чтобы определить, какой тип экземпляра наиболее подходит и сколько памяти нам действительно нужно. Для этого я подключился к серверу через ssh в то время, когда использование сервера достигло пика, и выполнил команды free
и top
, получив следующие результаты:
top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27607 nodejs 20 0 944m 146m 27m S 15.2 3.9 25:04.26 node
2384 root 24 4 626m 118m 8932 S 0.7 3.2 67:34.94 aws
3235 root 20 0 524m 29m 8628 S 0.3 0.8 6:19.01 cfn-hup
17626 nginx 20 0 68964 14m 3728 S 0.3 0.4 8:07.17 nginx
31893 ec2-user 20 0 15364 2116 1828 R 0.3 0.1 0:00.02 top
1 root 20 0 19692 2672 2252 S 0.0 0.1 0:02.18 init
(у всего остального% mem было 0,0)
free:
total used free shared buffers cached
Mem: 3824772 3654360 170412 60 108792 2956936
-/+ buffers/cache: 588632 3236140
Swap: 0 0 0
Итак, free
, похоже, указывает на использование памяти 95,5%, но менее 4% используется процессом nodejs , а все процессы в top
в сумме составляют всего 8,5%. Что именно здесь происходит? Куда идут остальные 87%? Должен ли я использовать меньший экземпляр, исходя из того факта, что процесс nodejs использует только 4% памяти и 15% процессора? Или мне нужен более крупный экземпляр, учитывая тот факт, что использование памяти уже составляет 95,5%? Если бы объем трафика увеличился настолько, что использование памяти процессом nodejs утроилось, у сервера закончилась бы память и произошел сбой, или он перераспределил бы часть этих таинственных 87% процессу nodejs?
Управление памятью в Linux может мало сбивать с толку некоторых людей, которые не знакомы с ним. В основном несколькими вещами, которые могут прибыть для проигрывания здесь, является или запуск шаров-зондов виртуальной памяти, или ядро использовало память для различных задач и процессов, но еще не освободило ее. Если Ваш процесс node.js потребовал большей памяти, то ядро может освободить его для использования для приложения.
Вы видите в своем выводе в 2-й строке 'свободных', что - / + буферы/кэш у Вас есть свободные 3 236 140 КБ памяти (3.2 ГБ). Большая часть этой памяти может быть доступна Вашему приложению в случае необходимости.
- / + буферы/кэш: 588632 3236140