MTA PostFix может быть серьезной угрозой утечки оперативной памяти если на сайте происходит большая почтовая активность и эта активность может быть вполне легальна, а не аномальна - например отправка подписавшимся в теме сообщений о новых постах, комментариях и т.д..
Анализ некоего сервера показал, что в пики активности пользователей на сайте идет очень активная отправка почты (демон ака postfix) демоном PostFix который пожирает +- 20% оперативной памяти:
top - 19:47:39 up 3 days, 14:43, 2 users, load average: 0.65, 0.40, 0.57 Tasks: 129 total, 2 running, 127 sleeping, 0 stopped, 0 zombie Cpu(s): 34.9%us, 37.2%sy, 0.0%ni, 18.5%id, 9.1%wa, 0.0%hi, 0.3%si, 0.0%st Mem: 502360k total, 440868k used, 61492k free, 26240k buffers Swap: 2138104k total, 40700k used, 2097404k free, 85792k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15094 jj 20 0 265m 61m 8856 S 0.0 12.5 1:17.05 php-cgi 13805 jj 20 0 264m 60m 8856 S 0.0 12.4 1:46.12 php-cgi 17549 jj 20 0 262m 60m 8720 S 19.9 12.3 0:44.12 php-cgi 18178 jj 20 0 260m 58m 8696 S 21.9 11.8 0:39.35 php-cgi 2131 root 20 0 297m 9.8m 8088 S 0.0 2.0 0:45.34 httpd 2024 mysql 20 0 606m 9856 3112 S 2.0 2.0 16:26.89 mysqld 19336 apache 20 0 297m 4232 1760 S 0.0 0.8 0:00.09 httpd 19208 apache 20 0 297m 4204 1776 S 0.3 0.8 0:00.28 httpd 18978 postfix 20 0 79568 3768 2848 S 0.0 0.8 0:00.02 smtp 19006 postfix 20 0 79568 3768 2852 S 0.0 0.8 0:00.01 smtp 18963 postfix 20 0 79568 3764 2848 S 0.0 0.7 0:00.02 smtp 18981 postfix 20 0 79568 3764 2848 S 0.0 0.7 0:00.01 smtp 18986 postfix 20 0 79568 3764 2848 S 0.0 0.7 0:00.02 smtp 19001 postfix 20 0 79568 3764 2844 S 0.0 0.7 0:00.01 smtp 19018 postfix 20 0 79568 3764 2848 S 0.0 0.7 0:00.02 smtp 18970 postfix 20 0 79568 3760 2848 S 0.0 0.7 0:00.01 smtp 18974 postfix 20 0 79568 3760 2848 S 0.0 0.7 0:00.01 smtp 18989 postfix 20 0 79568 3760 2848 S 0.3 0.7 0:00.02 smtp 18994 postfix 20 0 79568 3760 2848 S 0.0 0.7 0:00.01 smtp 18997 postfix 20 0 79568 3760 2848 S 0.0 0.7 0:00.02 smtp 19064 postfix 20 0 79568 3756 2836 S 0.0 0.7 0:00.02 smtp 19014 postfix 20 0 79568 3752 2844 S 0.0 0.7 0:00.01 smtp 19160 postfix 20 0 79568 3752 2836 S 0.0 0.7 0:00.01 smtp 18966 postfix 20 0 79568 3748 2836 S 0.0 0.7 0:00.02 smtp 19031 postfix 20 0 79568 3748 2844 S 0.0 0.7 0:00.02 smtp 19430 postfix 20 0 79568 3740 2832 S 0.0 0.7 0:00.00 smtp 19163 postfix 20 0 79568 3736 2832 S 0.0 0.7 0:00.01 smtp 19428 postfix 20 0 79568 3736 2844 S 0.0 0.7 0:00.00 smtp 19391 postfix 20 0 79640 3696 2744 S 0.7 0.7 0:00.02 cleanup 11316 postfix 20 0 79440 3548 2612 S 0.0 0.7 0:00.20 scache 19381 postfix 20 0 79364 3476 2620 S 0.3 0.7 0:00.01 pickup 19353 postfix 20 0 79372 3448 2596 S 0.0 0.7 0:00.00 trivial-rewrite ....
В приведённом выше примере PostFix откусил на свои нужды оперативной памяти почти 20% (0.7*24=16.8%), а при ещё большей почтовой активности сайта, PostFix отжирает ещё больше оперативки.
Как поубавить аппетиты MTA postfix и понизить число одновременной обработки отправляемых сообщений из очереди можно почитать на странице Postfix Performance Tuning, где упомянуто несколько параметров прямо влияющих на расход оперативной памяти (RAM) сервера:
- default_process_limit - устанавливает максимальное число запускаемых дочерних процессов и является практически самым важным параметром влияющим на расход оперативной памяти (RAM) сервера. Рекомендуется значение 1 на каждые 100 МВ оперативной памяти (RAM), а т.е. если на нашем сервере общая доступная память равна 1 ГБ, то оптимальным значением будет 10.
- default_destination_recipient_limit - устанавливает максимальное количество получателей для каждого сообщения пересылаемого lmtp(8), pipe(8), smtp(8)или virtual(8) агентом пересылки. Если пришло для пересылки сообщение адресованное количеству получателей, которое превышает установленный лимит, то оно будет разбито на несколько сообщений и потом отправлено. Можно оставить значение по умолчанию, его можно считать оптимальным - так например "Количество получателей одного сообщения (отправленного пользователем POP или IMAP по протоколу SMTP)" в почтовом сервисе gmail равно 99.
- smtpd_recipient_limit - устанавливает лимит на принимаемые нашим SMTP сервером сообщения, значение 50 будет вполне оптимальным.
Таким образом оптимальными значениями для сервера с оперативкой в 512 МВ будут следующие:
vi /etc/postfix/main.cf # http://www.postfix.org/postconf.5.html#default_process_limit # The default maximal number of Postfix child processes that provide # a given service. This limit can be overruled for specific services # in the master.cf file. # default: 100 default_process_limit=5 # http://www.postfix.org/postconf.5.html#default_destination_recipient_limit # The default maximal number of recipients per message delivery. # This is the default limit for delivery via the lmtp(8), pipe(8), smtp(8) # and virtual(8) delivery agents. # default: 50 default_destination_recipient_limit=50 # http://www.postfix.org/postconf.5.html#smtpd_recipient_limit # The maximal number of recipients that the Postfix SMTP server # accepts per message delivery request. # default: 1000 smtpd_recipient_limit=50 service postfix restart
Ссылки по теме:
- Postfix Configuration Parameters
- Помощь Почта@Mail.Ru - Ограничения на получения электронной почты
- Ограничения на отправку сообщений электронной почты - Cправка - Google Apps