Утечки памяти

Добрый день.
Начали наблюдаться постоянные утечки памяти. Может и не утечки - но что-то непонятное.
Сейчас в компьютере установлено 3 ГБ ОЗУ и 10 ГБ своп. OpenSUSE 12.1.
Резко растёт использование ОЗУ. За сутки забивается вся память и сервер тупо виснет. При старте - занято 350-380 МБ, через 15 часов добавляется минимум гигабайт.
Поначитался всяких советов и сделал:

  • раз в час сбрасываю кэш
  • vm.overcommit_memory = 2
  • vm.overcommit_ratio = 100
  • vm.swappiness = 90

В течении нескольких часов это как-то помогает, а потом - использование опять начинает расти. Делать перезагрузку раз в сутки - как-то не прикольно.

Что бы еще попробовать?

ЗЫ: Я бы не переживал, пусть хоть 2.8 будет из 3-х использовать… Лишь бы не висло.

Для того, чтобы всё зависло окончательно, нужно, чтобы ещё и свап полностью забился перед этим (чего вы и добились параметром vm.swappiness = 90). Чтобы не висло, нужно выяснить, кто столько памяти жрёт, и объяснить ему его неправоту, иначе никак :slight_smile:

27.03.2012 12:06, Minton написал:
>
> Для того, чтобы всё зависло
> окончательно, нужно, чтобы ещё и свап
> полностью забился перед этим (чего вы и
> добились параметром vm.swappiness = 90). Чтобы
> не висло, нужно выяснить, кто столько
> памяти жрёт, и объяснить ему его
> неправоту, иначе никак :slight_smile:
>
>
В своп ничего не выносится. Из 10 гиг свопа занято 400-500 КБ.

Slava_D Посмотрите через top или аналог, какой процесс занимает всю память, дальнейшие действия уже исходя из этого надо предпринимать.

Похоже, я не там искал…
Весьма не рекомендую всем использовать xtables-addons. Всякие там TARPIT-ы и прочую фигню. Ядро умирает из-за этого.
У меня более 100 попыток проломить файервол в секунду. Толи трояны ломятся ко мне, толи просто гады какие-то.

А как вы об этом узнали?

Состряпал я такой скрипт:


#!/bin/bash
echo "-----------------------------------------------------------------------------------" >> /var/log/my-memory-log
date >> /var/log/my-memory-log
echo "---" >> /var/log/my-memory-log
free -m >> /var/log/my-memory-log
echo "---" >> /var/log/my-memory-log
ps -aux -w -H | sort -nr -k 4 | head -20 >> /var/log/my-memory-log

Засунул его в крон с периодичностью 15 минут. А потом поглядел на результаты.

При старте:


vscan     2272  0.1  3.8 168048 120156 ?       Ssl  09:59   0:09 /usr/sbin/clamd
vscan     2272  0.0  3.8 168048 120156 ?       Ssl  09:59   0:00 /usr/sbin/clamd
root      2610  1.2  2.4  80180 76520 ?        S    09:59   1:19 spamd child                                                       
root      2611  0.1  2.1  70880 67228 ?        S    09:59   0:07 spamd child                                                       
root      2453  0.1  2.0  68148 63996 ?        Ss   09:59   0:06 /usr/sbin/spamd -d -c -L -r /var/run/spamd.pid                    
squid     2697  0.1  1.4  51660 44228 ?        S    10:00   0:06 (squid) -sY
named     2039  0.0  0.6  65500 21436 ?        Ssl  09:59   0:00 /usr/sbin/named -t /var/lib/named -u named
named     2039  0.0  0.6  65500 21436 ?        Ssl  09:59   0:00 /usr/sbin/named -t /var/lib/named -u named
named     2039  0.0  0.6  65500 21436 ?        Ssl  09:59   0:00 /usr/sbin/named -t /var/lib/named -u named
named     2039  0.0  0.6  65500 21436 ?        Ssl  09:59   0:00 /usr/sbin/named -t /var/lib/named -u named
named     2039  0.0  0.6  65500 21436 ?        Ssl  09:59   0:00 /usr/sbin/named -t /var/lib/named -u named
root      1479  0.0  0.4  17736 13028 ?        Ss   09:59   0:00 /usr/bin/perl /usr/libexec/webmin/miniserv.pl /etc/webmin/miniserv.conf
root      2559  0.0  0.3  29092  9324 ?        Ss   09:59   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
root      2452  0.0  0.3  27596  9672 ?        Sl   09:59   0:00 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
root      2452  0.0  0.3  27596  9672 ?        Sl   09:59   0:00 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
root      2452  0.0  0.3  27596  9672 ?        Sl   09:59   0:00 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
postgrey  2681  0.0  0.2  13348  9244 ?        Ss   10:00   0:00 /usr/sbin/postgrey -d --inet=127.0.0.1:10031 --auto-whitelist-clients                    
wwwrun    3970  0.0  0.1  29200  5460 ?        S    10:12   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    3342  0.0  0.1  29200  5464 ?        S    10:07   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    3341  0.0  0.1  29200  5460 ?        S    10:07   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf

Через 3-4 часа работы:


squid     2697  0.4  5.6 185116 176512 ?       S    10:00   2:11 (squid) -sY
vscan     2272  0.0  3.8 168048 120228 ?       Ssl  09:59   0:09 /usr/sbin/clamd
vscan     2272  0.0  3.8 168048 120228 ?       Ssl  09:59   0:00 /usr/sbin/clamd
root      2610  0.3  2.4  80180 76520 ?        S    09:59   1:56 spamd child                                                       
root      2611  0.0  2.1  70880 67064 ?        S    09:59   0:07 spamd child                                                       
root      2453  0.0  2.0  68148 63996 ?        Ss   09:59   0:08 /usr/sbin/spamd -d -c -L -r /var/run/spamd.pid                    
named     2039  0.0  0.7  66020 22384 ?        Ssl  09:59   0:03 /usr/sbin/named -t /var/lib/named -u named
named     2039  0.0  0.7  66020 22384 ?        Ssl  09:59   0:03 /usr/sbin/named -t /var/lib/named -u named
named     2039  0.0  0.7  66020 22384 ?        Ssl  09:59   0:00 /usr/sbin/named -t /var/lib/named -u named
named     2039  0.0  0.7  66020 22384 ?        Ssl  09:59   0:00 /usr/sbin/named -t /var/lib/named -u named
named     2039  0.0  0.7  66020 22384 ?        Ssl  09:59   0:00 /usr/sbin/named -t /var/lib/named -u named
root      1479  0.0  0.4  17736 13028 ?        Ss   09:59   0:00 /usr/bin/perl /usr/libexec/webmin/miniserv.pl /etc/webmin/miniserv.conf
root      2559  0.0  0.3  29092  9348 ?        Ss   09:59   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
root      2452  0.0  0.3  27596  9720 ?        Sl   09:59   0:01 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
root      2452  0.0  0.3  27596  9720 ?        Sl   09:59   0:01 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
root      2452  0.0  0.3  27596  9720 ?        Sl   09:59   0:00 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
postgrey  2681  0.0  0.2  13348  9288 ?        Ss   10:00   0:00 /usr/sbin/postgrey -d --inet=127.0.0.1:10031 --auto-whitelist-clients                    
wwwrun   18898  0.0  0.1  29200  5472 ?        S    12:09   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   18897  0.0  0.1  29148  5196 ?        S    12:09   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   18895  0.0  0.1  29200  5472 ?        S    12:09   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf

И больше никакие процессы не росли. Т.е. память “выедалась” не запущенным приложением.

При этом, нормальной картиной было:


             total       used       free     shared    buffers     cached
Mem:          3025       2797        227          0         80       2178
-/+ buffers/cache:        539       2486
Swap:        10054          3      10051

И всё-равно система ночью падала. Причём всё время в messages был разный процесс, которому было отказано в памяти.

После чего я включил лог файервола. Даже днём у меня по 60-110 “левых” попыток соединиться, большинство из них на старшие порты. Весьма похоже на каких-то вирусов-зловредов.

Из “подозрительного” в правилах файервола был один TARPIT на все TCP-соединения, не удовлетворяющие разрешенным правилам для внешнего канала. Я его туда вставил, начитавшись всяких хвалебных отзывов. Прибил это правило. Аптайм 42 часа. Около 605 МБ занято приложеними в ОЗУ, около 200 МБ свободно, остальные 2 с лишним гига кеш.

Периодически за это время включаю лог файервола. Количество “левых” попыток соединиться не уменьшилось, но на работоспособность это не влияет. DROP-аются такие попытки нормально.

Попутно вопрос: кто-то знает предельное число соединений в секунду, которое “выдерживает” недорогая сетевая плата? Я уже начал подумывать об аппаратном файерволе.

Во всяком случае за это вроде как ОС отвечает, а не сетевая карта.

Если возможно, хотелось бы получить какие-то цифры по этому вопросу.

количество сетевых соединений в Linux - General - Форум](http://www.linux.org.ru/forum/general/7207617)

Сенк, поизучаю.