PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND
28740 nobody 1 10 0 10M 9980K cpu/1 1:08 15.40% nginx
388 mysql 17 59 0 749M 670M sleep 598:21 12.97% mysqld
Как сие может быть - мне вообще непонятно, по идее прием от бэкенда и
выдача клиенту должны вообще ничего от процессора не требовать и уж
всяко бэкенд со своими libxml/libxslt должен жрать процессор на порядок
больше, чем фронтэнд. А у меня nginx только MySQL обгоняет по загрузке.
Похожую картину наблюдал у себя когда nginx отдавал с бакенда 80
меговые файлу в несколько сотен потоков - как я понял из за
постоянного чтения / записи проксированного контента во временные
файлы. Решилось прямой отдачей таки файлов nginx'ом.
А как в такой ситуации ведёт себя squid ? Что он делает с огромными
некэшируемым ответами ?
Кеширует на диск - но не новую копию на каждый запрос а одну.
по поводу сравнения производительности - нашел свои старые тесты
1) статический файл, размер 4 кб, ab -c 1000 -n 100000
Concurrency выше не поднимаю, так иначе у squid начинаются проблемы,
а настраивать его дополнительно я не готов.
squid + apache:
Time taken for tests: 416.201712 seconds
загрузка процессора при этом ~90% - squid, остальное ab
nginx:
Time taken for tests: 40.546765 seconds
процессор при этом деле делится ~ 50 на 50 между ним и nginx
2) динамический контент, размер ~60 кб, ab -c 100 -n 1000
Concurrency 100, так как иначе apache начинает свопится и отжирать
слишком много ресурсов.
squid + apache:
Time taken for tests: 26.724761 seconds
загрузка процессора ~35% squid
nginx + apache:
Time taken for tests: 18.190494 seconds
загрузка процессора ~7% squid
Алексей Бещёков