У меня есть сервер, который получает большие запросы POST (максимум 100 000 символов) и передает их обратно на сервер приложений Glassfish4 с помощью mod_jk. Запросы являются POST-запросами с типом содержимого application / x-www-form-urlencoded. Один из параметров - большой XML-документ, подготовленный на веб-странице хостинга. Я кодирую xml с помощью encodeURIComponent () на странице перед добавлением параметров, а затем отправляю POST с помощью XmlHttpRequest.
Использование RHEL 7 на машине Amazon EC2 с соответствующими ресурсами.
Free Command:
total used free shared buff/cache available
Mem: 3689604 2564636 712168 16992 412800 946260
ps -aux:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
apache 8276 1.6 1.6 293492 62228 ? S 14:51 1:08 /usr/sbin/httpd
postfix 8326 0.0 0.1 91168 3868 ? S 14:59 0:00 pickup -l -t un
apache 8372 0.0 0.1 237408 5896 ? S 15:05 0:00 /usr/sbin/httpd
apache 8575 0.0 0.1 237504 6160 ? S 15:24 0:00 /usr/sbin/httpd
apache 8595 6.5 3.3 354720 122936 ? S 15:26 2:23 /usr/sbin/httpd
apache 8649 6.4 2.8 335576 103624 ? S 15:32 1:57 /usr/sbin/httpd
apache 8655 7.0 2.9 342236 110316 ? S 15:32 2:07 /usr/sbin/httpd
apache 8698 0.0 0.1 237400 5600 ? S 15:37 0:00 /usr/sbin/httpd
apache 8700 0.0 0.1 237404 5512 ? S 15:37 0:00 /usr/sbin/httpd
apache 8711 0.0 0.1 237408 5912 ? S 15:41 0:00 /usr/sbin/httpd
apache 8714 0.0 0.1 237404 5384 ? S 15:46 0:00 /usr/sbin/httpd
root 8716 0.0 0.0 0 0 ? S 15:48 0:00 [kworker/0:1]
root 8719 0.0 0.0 0 0 ? R 15:53 0:00 [kworker/0:0]
Все работает нормально при низкой нагрузке, но при умеренном увеличении нагрузки (примерно 1 запрос в секунду) некоторые процессы apache переходят на высокий ЦП, и ЦП виртуальной машины достигает 100%.
Я много чего пробовал - обновил apache с 2.2 до 2.4.16, отключил SSL, перекомпилировал apache на чистой виртуальной машине, попытался закрыть соединения в браузере, но проблема продолжает повторяться.
Мои mod_status и ps -aux показывают процессы, которые вызывают нарушение, и когда я запускаю strace, я постоянно получаю следующее:
read(18, "\6\37\372", 3) = 3
write(18, "\0224\0\0", 4) = 4
read(18, "AB\0\3", 4) = 4
read(18, "\6\37\372", 3) = 3
write(18, "\0224\0\0", 4) = 4
read(18, "AB\0\3", 4) = 4
read(18, "\6\37\372", 3) = 3
write(18, "\0224\0\0", 4) = 4
read(18, "AB\0\3", 4) = 4
read(18, "\6\37\372", 3) = 3
write(18, "\0224\0\0", 4) = 4
read(18, "AB\0\3", 4) = 4
read(18, "\6\37\372", 3) = 3
write(18, "\0224\0\0", 4) = 4
read(18, "AB\0\3", 4) = 4
read(18, "\6\37\372", 3) = 3
write(18, "\0224\0\0", 4) = 4
read(18, "AB\0\3", 4) = 4
read(18, "\6\37\372", 3) = 3
write(18, "\0224\0\0", 4) = 4
read(18, "AB\0\3", 4) = 4
read(18, "\6\37\372", 3) = 3
write(18, "\0224\0\0", 4) = 4
read(18, "AB\0\3", 4) = 4
Единственное, что я не пробовал, - это опубликовать текст XML как text / plain без параметров.
Кто-нибудь может здесь что-нибудь придумать?
Спасибо за помощь.
Майк Руссиелло