Статус: Новичок
Группы: Участники
Зарегистрирован: 09.03.2017(UTC) Сообщений: 2
|
Неожиданно на продакше-кластере WildFly стало падать приложение J2EE примерно в одно и то же время утром. Цитата: root@_________:/var/log# uname -a Linux _________ 3.19.0-58-generic #64~14.04.1-Ubuntu SMP Fri Mar 18 19:05:43 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Данные мониторинга показали, что в районе 6.30 утра свободная системная память начинает утекать, это продолжается, пока не закончится вся системная память и своп, после этого память разом освобождается и все работает штатно. Наше приложение падало с ожидаемой ошибкой при попытке выделить памяти из heap. Но поскольку приложение стабильно работает на полусотне серверов, стали копать вокруг. На одном из серверов в kern.log на момент резкого освобождения памяти увидели вот это: Цитата: Mar 7 08:35:14 cons-app1 kernel: [6410120.774745] Out of memory: Kill process 21061 (lsof) score 545 or sacrifice child Mar 7 08:35:14 cons-app1 kernel: [6410120.775129] Killed process 21061 (lsof) total-vm:29948712kB, anon-rss:27045620kB, file-rss:4kB
Так как начало процесса отъедания системной памяти совпало с запуском суточного крона, копали скрипты крона. Из всех скриптов в /etc lsof использует только /etc/init.d/cprocsp, который запускается из скрипта /etc/cron.daily/cprocsp. Отключение /etc/cron.daily/cprocsp на одном из серверов показало, что теперь проблемы с памятью не возникает.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,272
Сказал(а) «Спасибо»: 22 раз Поблагодарили: 446 раз в 325 постах
|
Добрый вечер. А на этом сервере lsof вообще можно запустить, так чтобы ОЗУ не закончилась? Что возвращают Код:lsof|wc -l
lsof -F n|wc -l
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.03.2017(UTC) Сообщений: 2
|
Очевидно, что нет. Поэтому скрипт и падает. Но зачем так делать? lsof показывает все сокеты, пайпы и файлы, а их на продакшене несколько тысяч. ulimit -n у нас по умолчанию 65500.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,272
Сказал(а) «Спасибо»: 22 раз Поблагодарили: 446 раз в 325 постах
|
Мне не очевидно. Вы не могли бы это явно проверить и прислать вывод указанных мной команд? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.07.2018(UTC) Сообщений: 1
|
На сервере, где крутится хорошо нагруженное Java приложение, такой вот lsof выедает около 21 Гб памяти, памяти больше не остается и Linux вызывает OOMkiller. Который убивает то, что сочтет приоритетней в данный момент - может, lsof, а может, процесс Java. Особенно хорош совет "сделать это" (= попробовать уронить production) дважды - сначала через lsof , затем через lsof с разделителем. Насколько я понимаю логику этого куска: Цитата: # get csp opened files lsof_list=`lsof -F n|grep "/var/opt/cprocsp/tmp"|sed -n 's#^n\(/var/opt/cprocsp.*\)#\1#p'`
вместо можно использовать Код:lsof -F n -x +D /var/opt/cprocsp
что на два порядка уменьшает время выполнения и на 3 порядка - объем используемой при этом памяти. По крайней мере, на наших тестовых системах получается так.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close