php-fpm и 16 ядер

root.serverside.ru
На сайте с 25.02.2010
Offline
98
1134

исходные данные

centos 6 x64 / 24gb ram / 2 x 5620 (8x2.4ghz)

стоит nginx + mysql + php-fpm

php скрипт раз в сутки по крону обрабатывает таблицу mysql из 400К товаров и пишет в файл то, чего скажем уже нет, на это он тратит 8-10 минут, не нагружая при этом сервер вообще - LA 0.35, цепляется к одному из 16 (HT) ядер и там отрабатывает, в топе 90% CPU на одном ядре (остальные спокойно спят)

задача состоит в том, чтобы задействовать всю мощь CPU и снизить время обработки до 1-2 минут, средствами тонкой настройки окружения / ядра и т.п.

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

возможно ли такое в принципе, не переписывая скрипт ?

помогите советом, вторую ночь не сплю

спасибо

p.s. из трейса процесса, чем он занят

read(5, "\1\0\0\1\1B\0\0\2\3def\rnasha_base\1o\ncs"..., 16384) = 93

poll([{fd=5, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)

write(5, "\230\0\0\0\3SELECT package_fk FROM cs_o"..., 156) = 156

read(5, "\1\0\0\1\1B\0\0\2\3def\rnasha_base\1o\ncs"..., 16384) = 93

poll([{fd=5, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)

write(5, "\230\0\0\0\3SELECT package_fk FROM cs_o"..., 156) = 156

read(5, "\1\0\0\1\1B\0\0\2\3def\rnasha_base\1o\ncs"..., 16384) = 100

poll([{fd=5, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)

write(5, "\230\0\0\0\3SELECT package_fk FROM cs_o"..., 156) = 156

read(5, "\1\0\0\1\1B\0\0\2\3def\rnasha_base\1o\ncs"..., 16384) = 93

poll([{fd=5, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)

write(5, "\230\0\0\0\3SELECT package_fk FROM cs_o"..., 156) = 156

read(5, "\1\0\0\1\1B\0\0\2\3def\rnasha_base\1o\ncs"..., 16384) = 93

ostat

Linux 2.6.32-279.14.1.el6.x86_64 (net) 11/10/2012 _x86_64_ (16 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

2.94 0.00 0.16 0.07 0.00 96.83

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 13.31 528.44 67.02 1185814 150394

vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

2 0 0 22491024 21156 711528 0 0 19 3 58 108 3 0 97 0 0

скриншот топа

Andreyka
На сайте с 19.02.2005
Offline
822
#1

Это очень правильный вопрос. Он уже содержит в себе ответ.

Не стоит плодить сущности без необходимости
neznaika
На сайте с 28.06.2006
Offline
356
#2
Andreyka:
Он уже содержит в себе ответ.
root.serverside.ru:
переписать скрипт, чтобы он создавал десяток субпроцессов которые распределяться по ядрам для обработки всей базы по кускам

ммм, оно? :)

Дорого покупаю настоящие сайты. Не инвестирую деньги и не беру кредиты.
iHead
На сайте с 25.04.2008
Offline
137
#3

параллельное программирование рулит. вот только в PHP оно в зачаточном состоянии. несколько лет назад видел реализацию многопоточности в PHP через сокеты.

Рекомендуемый хостинг партнер 1С-Битрикс (https://www.ihead.ru/bitrix/), PHP-хостинг (https://www.ihead.ru/php/), доверенный партнер RU-CENTER (https://www.ihead.ru/news/573.html), официальный представитель REG.RU в Кирове (https://www.ihead.ru/news/851.html)
root.serverside.ru
На сайте с 25.02.2010
Offline
98
#4
iHead:
параллельное программирование рулит. вот только в PHP оно в зачаточном состоянии. несколько лет назад видел реализацию многопоточности в PHP через сокеты.

не совсем понял что ты имеешь ввиду

но вопрос мы решили с помощью CThread

---------- Добавлено 11.11.2012 в 04:41 ----------

php -q /home/******/**/index.php

Running dumper with 16 threads

merge complete. going to num ---> 23

merge complete. going to num ---> 22

merge complete. going to num ---> 21

merge complete. going to num ---> 20

merge complete. going to num ---> 19

merge complete. going to num ---> 18

merge complete. going to num ---> 17

merge complete. going to num ---> 16

merge complete. going to num ---> 15

merge complete. going to num ---> 14

merge complete. going to num ---> 13

merge complete. going to num ---> 12

merge complete. going to num ---> 11

merge complete. going to num ---> 10

merge complete. going to num ---> 9

merge complete. going to num ---> 8

merge complete. going to num ---> 7

merge complete. going to num ---> 6

merge complete. going to num ---> 5

merge complete. going to num ---> 4

merge complete. going to num ---> 3

merge complete. going to num ---> 2

merge complete. going to num ---> 1

merge complete. going to num ---> 0

#2012-11-11 00:02:56

#eofcfg 2012-11-11 00:03:59

вместо 8 мин

уперлись в мускуль

есть такая идея - за х ярить таблицу в рамдиск и ее там через mysqli вы е ба-ть, профиты - скипаем mysql конектор

андрейка, не ?

Andreyka
На сайте с 19.02.2005
Offline
822
#5

В каком плане уперлись?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий