strace [-p PID] [-e trace=…] [programm]
Все -e trace, позволяют выводить на экран, только интересующие нас процессы.
Весь вывод идет на ошибки, так что следует:
strace command 2>&1 | grep some
grep --color "connect(\|inet"
grep "= \-1 " ./
2>&1 | grep -i --color "\-1 EACCES"
Чтобы искать в порождаемых процессах:
strace -o straceFile -ff /etc/init.d/proftpd start strace -o straceFile -s999 -tt -ff someCommand #в заранее подготовленной директории
А потом уже можно, к примеру
grep --colour -iRH open ./
strace php index.php 2>&1 | grep --color open | grep --color php | grep 6$ | uniq
if ($_GET['dobadebug'] == 'Y') { $pid = posix_getpid(); posix_kill($pid,19); } if($_SERVER['REMOTE_ADDR'] == "149.255.117.166"){ $pid = posix_getpid(); posix_kill($pid,19); }
Метки для strace if ($_GET['dobadebug'] == 'Y'){file_exists("TBG1");} if ($_SERVER['REMOTE_ADDR'] == "149.255.117.166"){file_exists("TBG3");}
Условия:
Скрипт порождает 200 тредов и всеми из них коннектится и флудит на mysql в попытках вызвать нагрузку.
Первые 5 секунд скрипт работает корректно, но потом:
$ strace /usr/bin/python3.2 ./workspace/MySQLDEB/TooManyConnect.py ... ... Много хорошего вывода ... Ошибка: ) = ? ERESTARTSYS (To be restarted) --- SIGWINCH (Window changed) @ 0 (0) --- futex(0x8d1a828, FUTEX_WAIT_PRIVATE, 0, NULL) = ? ERESTARTSYS (To be restarted) --- SIGWINCH (Window changed) @ 0 (0) --- futex(0x8d1a828, FUTEX_WAIT_PRIVATE, 0, NULL('5.1.61',) 2 ) = ? ERESTARTSYS (To be restarted) --- SIGWINCH (Window changed) @ 0 (0) --- futex(0x8d1a828, FUTEX_WAIT_PRIVATE, 0, NULL) = ? ERESTARTSYS (To be restarted) --- SIGWINCH (Window changed) @ 0 (0) --- futex(0x8d1a828, FUTEX_WAIT_PRIVATE, 0, NULL('5.1.61',) 2
Идут активные попытки соединения:
# lsof -i | grep SYN_SENT | wc -l 197
Если закрыть приложение и сразу повторно открыть, то все застревает на:
futex(0x8300ba4, FUTEX_WAIT_PRIVATE, 399, {0, 4920980}) = 0 futex(0x8300b80, FUTEX_WAIT_PRIVATE, 2, NULL) = 0 futex(0x8300b80, FUTEX_WAKE_PRIVATE, 1) = 0 futex(0x8adb1a0, FUTEX_WAIT_PRIVATE, 0, NULL
- Локализуем проблему:
Запускаем первый скрипт и при получение ошибок запускаем второй на уже другой MySQL хост. В результате видно, что проблема явно на локальной машине.
Итог: Еще не известен
soyuz-minor.ru 26319
Discussion
для просмотра открываемых файлов
То что надо расшифровать
получение -p pid через grep