Я использую VestaCP на Debian 9.
Вчера я получил 3 оповещения по электронной почте, связанных с cron. Все три содержат одно и то же сообщение об ошибке: /bin/sh: execle: Cannot allocate memory
.
Итак, я начал с free --mega
команда:
total used free shared buff/cache available
Mem: 5969 5078 366 210 525 452
Swap: 0 0 0
Очевидно, проблема с оперативной памятью, так как у меня всего 366 Мб свободного места.
Чтобы узнать больше, я использовал следующую команду ps -A --sort -rss -o comm,pmem,rss | head -n 20
чтобы перечислить мои процессы, использующие ОЗУ:
fail2ban-server 35.2 2101952
systemd-journal 22.9 1370060
clamd 16.9 1014312
mysqld 2.8 169508
spamd child 1.5 95288
spamd 1.3 83448
spamd child 1.3 83048
apache2 0.6 41752
apache2 0.6 41444
apache2 0.6 40308
apache2 0.6 40276
apache2 0.6 40156
apache2 0.6 39860
apache2 0.6 39624
apache2 0.6 38696
apache2 0.6 37840
apache2 0.5 32160
apache2 0.3 17912
named 0.2 16016
Итак, я правильно понимаю, кажется, что первые 3 процесса используют 75% ОЗУ!
Хотелось бы узнать ваше мнение о том, как это оптимизировать:
1) Нормальны ли эти результаты?
2) Есть ли способ исправить это? Может, очистив кеш?
3) Я слышал о команде ulimit, но действительно ли она эффективна? Если я настрою ulimit 256 для fail2ban и clamav, разве это не сделает эти процессы бесполезными?
Я провел много исследований, но либо это не касалось моей проблемы, либо темы, относящиеся к 2010-2012 гг., Могут быть неправильными в 2020 году.
Изменить 1: Я не знаю, что проверять на fail2ban и clamav, но для журнала я полагаю, что файл конфигурации находится в /etc/systemd/journald.conf. Вот мой:
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
Следует ли что-то изменить в этом, чтобы ограничить использование оперативной памяти?
Изменить 2: вот результат cat /proc/sys/vm/swappiness
: 60
У меня была проблема с ClamAV и памятью, добавление диска подкачки 4 ГБ решило проблему.
dd if=/dev/zero of=/media/swap.img bs=1024 count=4M
mkswap /media/swap.img
и т. д. / fstab
/media/swap.img none swap sw 0 0
А потом перезагрузитесь.
На мой взгляд, ядро не может выделять память, так как нет свопа. Ваш swapiness равен 60, поэтому ядро может использовать swap, когда используется 60% RAM. Поскольку свопа нет, его не удалось выделить. Вы должны установить для swappiness значение 0 с помощью echo 0 > /proc/sys/vm/swappiness
, или / и добавить пространство подкачки.
Также посмотрите, чтобы сменить fail2ban на другой блокировщик портов, более легкий. Я видел Pyruse в своих документах, но никогда не тестировал его