Назад | Перейти на главную страницу

Проанализируйте журнал uwsgi strace, чтобы выяснить, почему он требует высокой загрузки ЦП

Я запускаю сайт django с nginx через uwsgi. Проблема в том, что процесс uwsgi занимает много процессорного времени, когда трафик становится большим. Та же самая конфигурация отлично работает на тестовом сервере и siege / ab имитирует интенсивный одновременный трафик.

Вот один журнал strace процесса uwsgi. http://dl.dropbox.com/u/43017476/strace.log

И немного sysctl:

fs.file-max = 128000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.core.somaxconn = 250000
net.ipv4.tcp_keepalive_time = 300

nginx conf почти такой же, как и другие руководства от Google. Я пытался понять это, но безуспешно. Однако я нашел много таких штук:

22:12:02.932276 read(8, "\7\0\0\2\0\0\0\2\0\0\0", 16384) = 11
22:12:02.932504 poll([{fd=8, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
22:12:02.932547 write(8, "\17\0\0\0\3SET NAMES utf8", 19) = 19
22:12:02.932643 read(8, "\7\0\0\1\0\0\0\2\0\0\0", 16384) = 11
22:12:02.933237 poll([{fd=8, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
22:12:02.933279 write(8, "\21\0\0\0\3set autocommit=0", 21) = 21
22:12:02.933330 read(8, "\7\0\0\1\0\0\0\0\0\0\0", 16384) = 11

В то время как файловый дескриптор 8 - это сокет mysql. Но сервер Mysql, похоже, работает нормально. Я вижу, что каждый системный вызов "read" потребляет большую часть времени процессора, но не знаю, что здесь не так. Тот же сервер базы данных без проблем обслуживал бывший сайт PHP.

Любые идеи приветствуются.

strace, скорее всего, не покажет вам, сколько времени занимает процессор, поскольку показывает системные вызовы. Процессорное время, которое, как показано, потребляет процесс, - это время, затрачиваемое на выполнение кода в самом приложении. Чтение / запись / опрос, который вы показываете, скорее всего, являются обычным обменом данными с MySQL, или приложение опрашивает mysql FD (неблокирующий) для поиска нового трафика.

На самом деле у меня нет решения для вас, как найти причину вашей высокой загрузки процессора, однако я подумал, что не буду тратить слишком много времени на поиск ответа в выводе strace :)