LINUX.ORG.RU
ФорумAdmin

high load web server

 , ,


1

2

подкиньте дельных советов по тюнингу. система 12core/12GB, ubuntu 10.04, nginx + posgtesql + django. ожидаемая нагрузка — 100k в очень короткое время.

добился уже более-менее стабильных 5000cps на django и ~20000cps на статике, но как-то всё ещё недоволен.

в первую очередь интерессует критика по поводу:

fs.file-max = 65536
kernel.shmmax = 2147483648
kernel.shmall = 524288
net.core.somaxconn = 10240
net.ipv4.tcp_fin_timeout = 3
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
#net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 16384 61000
net.ipv4.tcp_syncookies = 0

кто что посоветует?

ещё одна проблема с ulimit'ами: daemon-start-stop не цепляит их к сожалению из /etc/security/limits.conf. как workaround добавил их в стартовые скрипты. но как того же добиться лучше/правильней?

★★★★★

Так глубоко не копался, но мои опыты показали, что встроенный в django fcgi очень тормозной. На значительно более слабом железе(4 ядра, 4 гига памяти) проект после перевода на apache2(wsgi)+nginx показал значительно большую производительность.

Цифр, правда, не покажу, так как тот сервер уже не админю.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

django на gunicorn + gevent вроде более-мене быстро и стабильно.

beastie ★★★★★
() автор топика
net.core.somaxconn = 10240
net.ipv4.tcp_max_syn_backlog = 10240
net.ipv4.tcp_syncookies = 1

В nginx:

[...]
server {
    listen 80 backlog=10240;
    [...]
}
[...]
Если очередь в 10240 соединений забьется, в dmesg появится сообщение о посылке SYN cookies.

fjoe
()

Неправильный выбор системы! Убунта не потянет! Советую лучше фряху, а еще лучше DragonflyBSD, она на гибридном ядре, очень легкие нити и т.п. и т.д. Я знаю только одну систему, которая не уступает ей в правильности балансировки нагрузки между ядрами, но она не подойдет, потому как десктопная. Так что или фряха или драгонфля - однозначно.

jamy
()
Ответ на: комментарий от jamy

к сожалению есть клиентские полиси. у них убунта и баста. да и поздно метаться. это отностся и к uwsgi. надо оттюнить то, что есть.

beastie ★★★★★
() автор топика
Ответ на: комментарий от beastie

Еще можно размазать nginx нагрузку по разным CPU или прибить его workerов к выделенным специально для него(nginxa) ядрам.

worker_processes 5;
#                worker1      worker3
#                    |          |
worker_cpu_affinity 0001 0010 0100 1000 0011;
#                   ^^^^ 
#                   |||`--- CPU0
#                   ||`---- CPU1
#                   |`----- CPU2
#                   `-------CPU3

добился уже более-менее стабильных 5000cps на django

Про django ничего не скажу, разве что полностраничное кэширование позволяется?

fjoe
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.