Всем привет. Есть сервер: Centos 6.6 \ 32 GB RAM \ 500 Mbit канал.
Задача: Хочу запустить многопоточный скрипт на php, который скачивает содержимое разных доменов.
Проблема: При увеличении количества потоков, производительность отдельного потока сильно падает - т.е. увеличивается время исполнения потока, а так же часть запросов вылетают по таймауту. Так же загрузка канала становится неравномерной. В итоге увеличение кол-ва потоков не дает прироста производительности, а только ухудшение качества конечного результата
Дебаг: При 10 потоках 1 поток исполняется 20 скунд При 20 потоках 1 поток исполняется 21 секунду При 50 потоках 1 поток исполняется 25 секунд При 100 потоках 1 поток исполняется от 50 до 110 секунд При 150 потоках от 50 до 150 секунд
Запускал так же аналогичные скрипты: - на Ruby - из командной строки при помощи curl и Get. Ситуация была аналогичной, до 50 потоков все ок, потом начинается невероятное.
Аналогичные операции проверялись на другом сервере с Centos 7, симптомы точно такие же.
Вопрос: Какие системные настройки можно подркрутить, что бы многопоточно можно было скачивать?
Содержимое ulimit -a =================================== core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 255955 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 500000 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 255955 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited ===================================
Sysctl =================================== net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.ipv6.conf.all.autoconf = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.eth0.autoconf = 0 net.ipv6.conf.all.accept_ra = 0 net.ipv6.conf.default.accept_ra = 0 net.ipv6.conf.eth0.accept_ra = 0 fs.file-max = 2097152 fs.file-max = 500000 net.ipv4.ip_local_port_range = 10024 65000 net.core.somaxconn = 131072 net.ipv4.tcp_keepalive_time = 180 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_keepalive_intvl = 30 net.netfilter.nf_conntrack_max = 262144 net.netfilter.nf_conntrack_tcp_timeout_established = 28800 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.rmem_max = 8388608 net.core.wmem_max = 8388608 net.core.netdev_max_backlog = 2000 net.ipv4.tcp_max_syn_backlog = 2048 ===================================
Заранее большое спасибо!