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

Загадочное использование свопа на EC2

Мы находимся в середине проекта по переносу нашей инфраструктуры из ситуации совместного использования в Amazon EC2, и мы заметили некоторые странные характеристики памяти процессов в нашей настройке. Не вдаваясь в подробности о специфике наших процессов, мы заметили, что на наших инстансах EC2 «вверху» будут показаны процессы, использующие много пространства подкачки - фактически, намного больше, чем объем доступного подкачки или (если вы все это сложите) больше, чем доступный диск.

Вот пример основного вывода:

Mem:   7136868k total,  5272300k used,  1864568k free,   256876k buffers
Swap:  1048572k total,        0k used,  1048572k free,  2526504k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND                                                                            
 4121 jboss     20   0 5913m 603m  14m S  0.7  8.7   3:59.90 5.2g java                                                                               
22730 root      20   0 2394m 4012 1976 S  2.0  0.1   4:20.57 2.3g PassengerHelper                                                                    
20564 rails     20   0 2539m 220m 9828 S  0.3  3.2   0:23.58 2.3g java                                                                               
 1423 nscd      20   0  877m 1464  972 S  0.0  0.0   0:03.89 876m nscd                          

Вы можете видеть, например, что jboss, как сообщается, использует 5,2 ГБ пространства подкачки, что определенно невозможно, поскольку выделено только 1 ГБ и ничего не используется (вероятно, потому, что еще 1,8 ГБ ОЗУ).

И вот результаты uname -a:

Linux xxx.yyy.zzz 2.6.35.14-106.53.amzn1.x86_64 #1 SMP Fri Jan 6 16:20:10 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

Мы запускаем AMI на основе AMI Amazon Linux по умолчанию (Amazon Linux AMI выпуска 2011.09, поэтому некоторые RHEL5 и RHEL 6) с небольшим количеством настроек и определенно без настроек уровня ядра.

Что-то здесь подсказывает мне, что в этом конкретном ядре / дистрибутиве отчет об использовании подкачки или, возможно, даже об общем использовании памяти - это не то, чем кажется ...

Любая помощь будет оценена по достоинству!

По факту, jboss использует 5,9 ГБ виртуальной памяти и не использует пространство подкачки. В top инструмент использует неверную формулу для вычисления того, что он ошибочно сообщает как пространство подкачки. Фактически это результат вычитания размера резидентного набора из размера адресного пространства. Это глупая вещь, поскольку одна - это мера виртуальной памяти, а другая - мера физической памяти. Так что не совсем понятно, какой результат вообще является мерой. Число так же бессмысленно, как пропавший доллар в старая загадка.

(На самом деле, это не совсем бессмысленно. Это максимальный объем пространства подкачки, который может потребоваться текущим сопоставлениям программы, если они все были загрязнены, а размер резидентного набора программы не изменился. Это действительно, очень близко к бессмысленному, хотя это не занимает во внимание, доступны ли вообще эти сопоставления для записи.)