У меня есть эластичная среда beanstalk, на которой запущен сервер nodejs. Я пытаюсь измерить использование памяти, чтобы определить, какой тип экземпляра является наиболее подходящим и сколько памяти нам действительно нужно. Для этого я подключился к серверу через ssh в то время, когда использование сервера достигло пика, и запустил free
и 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)
свободно:
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-й строке «free», что - / + buffers / cache у вас свободно 3236140 КБ памяти (3,2 ГБ). При необходимости большая часть этой памяти может быть доступна вашему приложению.
- / + буферы / кеш: 588632 3236140