У меня есть скрипт на python, который отключается и выполняет несколько запросов HTTP и urllib к различным доменам.
У нас огромное количество доменов для процессов, и мы должны сделать это как можно быстрее.Поскольку HTTP-запросы медленны (т. Е. Они могут истечь, из-за отсутствия веб-сайта в домене), я одновременно запускаю несколько сценариев, подающих их из списка доменов в базе данных.
Проблема, с которой я столкнулсяСм. в течение определенного периода времени (от нескольких часов до 24 часов), все сценарии начинают замедляться и ps -al показывает, что они спят.
Серверы очень мощные (8 ядер, 72 ГБ оперативной памяти, 6 ТБ)Raid 6 и т. Д. И 80 МБ (соединение 2: 1) и никогда не превышаются, т. Е. Free -m
показывает
-/+ buffers/cache: 61157 11337
Swap: 4510 195 4315
Топ показывает 80-90% простоя
sar -d показывает в среднем 5,3% util
и, что более интересно, iptraf запускается со скоростью около 50-60 МБ / с и заканчивается со скоростью 8-10 МБ / с примерно через 4 часа.
В настоящее время я запускаю около 500 версий скриптана каждом сервере (2 сервера), и они оба показывают ту же проблему.
ps -al
показывает, что большинство скриптов python спят, что я не понимаю, например, например:
0 S 0 28668 2987 0 80 0 - 71003 sk_wai pts/2 00:00:03 python
0 S 0 28669 2987 0 80 0 - 71619 inet_s pts/2 00:00:31 python
0 S 0 28670 2987 0 80 0 - 70947 sk_wai pts/2 00:00:07 python
0 S 0 28671 2987 0 80 0 - 71609 poll_s pts/2 00:00:29 python
0 S 0 28672 2987 0 80 0 - 71944 poll_s pts/2 00:00:31 python
0 S 0 28673 2987 0 80 0 - 71606 poll_s pts/2 00:00:26 python
0 S 0 28674 2987 0 80 0 - 71425 poll_s pts/2 00:00:20 python
0 S 0 28675 2987 0 80 0 - 70964 sk_wai pts/2 00:00:01 python
0 S 0 28676 2987 0 80 0 - 71205 inet_s pts/2 00:00:19 python
0 S 0 28677 2987 0 80 0 - 71610 inet_s pts/2 00:00:21 python
0 S 0 28678 2987 0 80 0 - 71491 inet_s pts/2 00:00:22 python
В сценарии, который получает эxecuted, поэтому я не могу понять, почему ps -al показывает, что большинство из них спят, и почему они должны работать медленнее и медленнее, делая меньше IP-запросов с течением времени, когда CPU, память, доступ к диску и пропускная способность доступны в изобилии.
Если бы кто-нибудь мог помочь, я был бы очень признателен.
РЕДАКТИРОВАТЬ:
Код является огромным, так как я использую исключения через него, чтобы перехватить диагностику о домене, то есть причины, по которым я не могу подключиться,При необходимости разместит код где-нибудь, но основные вызовы через HTTPLib и URLLib сразу же приводятся в примерах на python.
Дополнительная информация:
Оба
quota -u mysql quota-u root
возвращаться ни с чем
nlimit -n возвращается с 1024, имеют change limit.conf, чтобы разрешить mysql разрешать 16000 мягких и жестких соединений и может запускать более 2000 сценариев, поэтомудалеко, но все еще проблема.
НЕКОТОРЫЙ ПРОГРЕСС
Хорошо, поэтому я изменил все ограничения для пользователя, убедился, что все сокеты закрыты (они не были), и хотя все лучше,Я все еще замедляюсь, хотя и не так плохо.
Интересно, что я также заметил некоторую утечку памяти - скрипты используют все больше и больше памяти, чем дольше они работают, однако я не уверен, что является причиной этого.Я сохраняю выходные данные в строке, а затем печатаю их на терминале после каждой итерации. Я также очищаю строку в конце, но может ли когда-либо увеличиваться объем памяти до терминала, хранящего весь вывод?
Редактировать: Нет, похоже нет - запустил 30 скриптов без вывода на терминал и все той же утечки.Я не использую ничего умного (только строки, HTTPlib и URLLib) - интересно, есть ли какие-либо проблемы с соединителем Python mysql ...?