Назад | Перейти на главную страницу

Как точно измерить использование памяти на сервере Elastic Beanstalk / EC2?

У меня есть эластичная среда 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