Dimanych

Рейтинг
155
Регистрация
05.06.2007

обычно во всех немецких ДЦ урезают канал до 10мбит а не отрывают провода...

myhand:
если "не без mysql" и заменить exim на postfix:
http://workaround.org/ispmail/lenny
хорошая отправная точка.

если нужно адаптировать такое решение - обращайтесь.

Это не подходит, к сожалению. Exim более популярный, стабильный, и функциональный, по крайней мере так пишут. (и для меня он более знакомый) А на файлах всё должно быть по личным соображениям. Другие варианты не подходят. Кстати сборка походит на сборку от DA.

Не одного предложения в ПМ не было, где все спецы по exim? :)

да, пхп так и запускается.

проблема в том что трудно это всё выловить в реальном времени

strace ничего не выводит в тот момент когда активно используется процессор, а что было до этого момента никак не узнать, я ведь не могу знать когда будет очередная волна с такими зависаниями (

очень удивительная вещь, может месяц всё нормально работать, а потом не с того не с сего такие глюки раза 3 за день, и само проходит... сейчас хоть запустил скрипт который перезагружает пхп если он не реагирует!

Запускать strace на все процессы, писать логи, как зависнет, убить все strace и смотреть что там последнее в логах? =)

В том то и дело, даже 10х нет, Debian lenny

top -V

top: procps version 3.2.7

usage: top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...]

На сервере сайты и вот такой вывод хороший, всё по нулям =)

1 root 20 0 10312 748 620 S 0 0.0 0:17.64 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0 0.0 0:02.38 migration/0
4 root 15 -5 0 0 0 S 0 0.0 0:00.24 ksoftirqd/0
5 root RT -5 0 0 0 S 0 0.0 0:00.00 watchdog/0
6 root RT -5 0 0 0 S 0 0.0 0:00.52 migration/1
7 root 15 -5 0 0 0 S 0 0.0 0:00.06 ksoftirqd/1

ну например,

- 0.4% используют какие то процессы, а в топе их наверху не видно потому что округляется до 0, не сортируются

- хотим посчитать сколько потребляет 1 пользователь, а не можем по той же причине ( вдруг на нём висит 50 процессов и все они потребляют около 0.4 и выводится 0, и вот, 0.4*50 = 20%, кто съел, не знаем)

я не говорю что это для критический недостаток, но хотелось бы десятые доли для отчётности ;) ну раз нет так нет, если что сурсы подправлю, или старую версию поставлю)

Удалось отловить процесс php-cgi потреблющий 99%CPU (при нормальной работе их нет) и в тот момент когда он что-то делает (после чего частенько все php процессы не принимают новые соединения) выполнить strace и lsof

Вот такие результаты, но мне они не очём не говорят 🙅

наверное интересный strace должен быть до этого момента (

несколько секунд ничего не выводится кроме первой строки, потом это начиная с SIGPROF:

strace -p 3460
Process 3460 attached - interrupt to quit
--- SIGPROF (Profiling timer expired) @ 0 (0) ---
setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={30, 0}}, NULL) = 0
rt_sigaction(SIGPROF, {0x82b3ad0, [PROF], SA_RESTART}, {0x82b3ad0, [PROF], SA_RE START}, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0
close(6) = 0
fcntl64(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1}) = 0
fcntl64(3, F_SETLKW, {type=F_UNLCK, whence=SEEK_SET, start=0, len=1}) = 0
write(5, "\1\6\0\1\0\r\3\0   \0\0\0", 24) = -1 EPIPE (Broken pipe)
--- SIGPIPE (Broken pipe) @ 0 (0) ---
munmap(0xb373c000, 266240) = 0
munmap(0xb377d000, 266240) = 0
munmap(0xb37be000, 528384) = 0
munmap(0xb78e9000, 266240) = 0
mmap2(NULL, 266240, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x b78e9000
setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
write(5, "\1\6\0\1\0\r\3\0   \0\0\0\1\3\0\1\0\10\0\0"..., 40) = -1 EPI PE (Broken pipe)
--- SIGPIPE (Broken pipe) @ 0 (0) ---
shutdown(5, 1 /* send */) = 0
recv(5, "\1\5\0\1\0\0\0\0", 8, 0) = 8
recv(5, "", 8, 0) = 0
close(5) = 0
accept(4, <unfinished ...>

и lsof для подобного процесса

lsof -p 3458
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
php-cgi 3458 wwwrun cwd DIR 8,1 110592 7110665 /home/web/html
php-cgi 3458 wwwrun rtd DIR 8,1 4096 2 /
php-cgi 3458 wwwrun txt REG 8,1 14141558 2475330 /usr/local/bin/php-cgi
php-cgi 3458 wwwrun mem REG 0,0 0 [heap] (stat: No such file or directory)
php-cgi 3458 wwwrun mem REG 8,1 17840 38682949 /lib/tls/i686/cmov/libnss_dns-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 549984 2458197 /usr/lib/locale/locale-archive
php-cgi 3458 wwwrun DEL REG 0,8 414112460 /dev/zero
php-cgi 3458 wwwrun mem REG 8,1 38372 38682950 /lib/tls/i686/cmov/libnss_files-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 339330 46072457 /root/conf/php/xcache.so
php-cgi 3458 wwwrun mem REG 8,1 14504 2458347 /usr/lib/libkrb5support.so.0.0
php-cgi 3458 wwwrun mem REG 8,1 89370 38682955 /lib/tls/i686/cmov/libpthread-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 1241392 38682941 /lib/tls/i686/cmov/libc-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 1147196 2458454 /usr/lib/libxml2.so.2.6.27
php-cgi 3458 wwwrun mem REG 8,1 5820 38682633 /lib/libcom_err.so.2.1
php-cgi 3458 wwwrun mem REG 8,1 151252 2458344 /usr/lib/libk5crypto.so.3.0
php-cgi 3458 wwwrun mem REG 8,1 508328 2458346 /usr/lib/libkrb5.so.3.2
php-cgi 3458 wwwrun mem REG 8,1 111708 2458343 /usr/lib/libgssapi_krb5.so.2.2
php-cgi 3458 wwwrun mem REG 8,1 76548 38682947 /lib/tls/i686/cmov/libnsl-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 9592 38682944 /lib/tls/i686/cmov/libdl-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 145136 38682945 /lib/tls/i686/cmov/libm-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 67364 38682956 /lib/tls/i686/cmov/libresolv-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 127488 2458426 /usr/lib/libjpeg.so.62.0.0
php-cgi 3458 wwwrun mem REG 8,1 137760 2458443 /usr/lib/libpng12.so.0.15.0
php-cgi 3458 wwwrun mem REG 8,1 29700 38682640 /lib/libpam.so.0.79
php-cgi 3458 wwwrun mem REG 8,1 1270520 2458191 /usr/lib/i686/cmov/libcrypto.so.0.9.8
php-cgi 3458 wwwrun mem REG 8,1 253120 2458192 /usr/lib/i686/cmov/libssl.so.0.9.8
php-cgi 3458 wwwrun mem REG 8,1 30612 38682957 /lib/tls/i686/cmov/librt-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 78500 2458925 /usr/lib/libz.so.1.2.3
php-cgi 3458 wwwrun mem REG 8,1 772960 2458209 /usr/lib/libc-client.so.2002edebian.1
php-cgi 3458 wwwrun mem REG 8,1 21868 38682943 /lib/tls/i686/cmov/libcrypt-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 88164 38683040 /lib/ld-2.3.6.so
php-cgi 3458 wwwrun 0r CHR 1,3 304 /dev/null
php-cgi 3458 wwwrun 1w CHR 1,3 304 /dev/null
php-cgi 3458 wwwrun 2w CHR 1,3 304 /dev/null
php-cgi 3458 wwwrun 3u REG 8,1 0 3053919 /tmp/.xcache.1000.0.1804289383.lock (deleted)
php-cgi 3458 wwwrun 4u unix 0xedbf5200 414112462 /tmp/php-wwwrun.sock
php-cgi 3458 wwwrun 5u unix 0xe686a200 414312638 /tmp/php-wwwrun.sock
php-cgi 3458 wwwrun 6u sock 0,4 414312743 can't identify protocol

Какие выводы можно сделать?

Кто-нибудь знает как можно получить вывод top для CPU с 10тыми долями, например 0.1

Просто в новых версиях top показываются только целые значения для cpu.

или есть альтернативная команда для отслеживания потребления ресурсов в реальном времени?

Хочется добавить своё слово так как был с этим плотно связан какое то время)

Автор движется в правильном направлении, простых iptables и limit_zone не достаточно, по крайней мере мне было не достаточно когда приходилось бороться с разними видами ддос атак, причём иногда со всеми сразу, syn/tcp/udp flood (и на php приложения естественно) несколько тысяч ботов, и входящим трафиком более 100мбит

Вы не поверите, мой сат открывался, и нормально, когда всё-же часть нормальных пакетов пролетало через сетевую в 100мбит и ограничение на свитче. (учитывая ддос с превышением)

Нормальной работой сайта это не назвать, но всё-же приятно что ддосеры побеждают лиж потому что мне не хватате канала для борьбы ;)

А результатирующая настройка сервера основывается как раз на всех видах защит iptables + limit_zone (эффективности в ней мало) + укреплением tcp стека и главное, самописанная программа без которой всё остальное просто теряло смысл! Программа по смыслу аналогична программе автора(анализатор логов и подключений), только более гибкая, вплоть до самоочистки забаненных адресов.

Ну опять же это защита только на уровне сервера, а при серьёзных атаках этого не достаточно.

fd_setsize установлен на 1024 по умолчанию (одновременных подключений через select socket), поправить можно легко, но не ужели этого может не хватать?

Возможно это потребуется для отдачи файликов большому числу юзеров, но для этого уж точно лучше nginx с epoll ;)

точных цифр нет, при подсчёте числа httpd процессов до 50% больше, при нынешних серверах с 8гб оперативы это вообще не проблема) (пробовал с itk и без него на нагруженном сервере)

Всего: 830