Добрый день столкнулся с такой интересной проблемой. При запуске демона на reactphp (socket_v_1.1) работа идет 20-40 часов хорошо. Все отлично работает нагрузка cpu 1%. Спустя N времени ( чаше всего 2 суток) cpu нагружается до 100%. За карказ был взят код с https://sergeyzhuk.me/2017/06/22/reactphp-chat-server/ Результаты strace -cp PID Когда все хорошо Код (Text): % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 65.51 30.203875 381 79272 select 15.67 7.223466 12 578526 poll 3.51 1.618171 13 122870 sendto 2.65 1.221483 14 89365 write 2.33 1.074446 3 331647 90181 recvfrom 2.26 1.042860 9 119946 close 2.10 0.966238 11 89365 open 1.38 0.635554 21 30535 30535 connect 1.33 0.611477 20 30535 socket 0.72 0.330808 4 89365 getcwd 0.66 0.305419 2 178730 lseek 0.62 0.286276 9 30535 clone 0.44 0.202171 2 89365 fstat 0.22 0.099490 2 64660 fcntl 0.21 0.098397 7 13406 5 lstat 0.15 0.068192 2 30536 getsockopt 0.12 0.056094 2 30536 getpeername 0.11 0.048970 2 30536 getsockname 0.02 0.008363 10 875 accept 0.00 0.000418 14 30 munmap 0.00 0.000321 7 45 29 shutdown 0.00 0.000302 8 36 mmap 0.00 0.000191 5 36 madvise 0.00 0.000016 16 1 restart_syscall ------ ----------- ----------- --------- --------- ---------------- 100.00 46.102998 2030753 120750 total Когда полный писец и нагрузка под 100% Код (Text): % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 95.58 64.301322 99 652609 select 2.39 1.606987 2 652610 652610 accept 2.03 1.363961 2 652610 poll ------ ----------- ----------- --------- --------- ---------------- 100.00 67.272270 1957829 652610 total Вот теперь гадаю, это проблемы из за reactphp или это из за ОС(centos 7) с какой стороны ошибки. Может кто сталкивался с проблемой. Надо бы сделать профилирование наверное еще. Но вот не совсем знаю как это сделать на xdebug именно в демоне. так как php 7 то XHprof тут отпадает.
Когда все идет хорошо, не жрет не жрет не жрет, а потом ВНЕЗАПНО начинает жрать как не в себя, частенько виноват сборщик мусора, запуск которого откладывался до последнего, а потом система решила, что настало его время. Когда он начинает чистить весь шлак, набежавший за 20-40 часов часов хорошей работы, сервак встает колом. Эта проблема довольно остро и на десктопах чувствуется в разработке, кстати. По этой причине в долгоиграющих приложениях желательно принудительно вызывать сборщик мусора время от времени, чтобы размазать нагрузку по всему таймлайну. В PHP, благо, предусмотрены средства для этого. Но это лишь одна из возможных причин. Не факт, что верная.
могу предложить попробовать https://github.com/swoole/swoole-src если так хочется php ну а вообще node рулит
Спасибо за советы, очистка мусора не помогла. Все же php просто не сильно подходит под такие задачи. Были и другие варианты для решения, это то что сокет не разрывается и буффер ожидает пакет, и многое другое что отследить средствами тяжело. Проблема решена переписыванием на node =) до конца не хотел этого делать...
это у нас узнаем pid процесса сохраняем его в бд(или в файл) потом делаем скрипт который делает kill по процессу, и запускает заново. Еще остается вероятность того что порт не сразу освободился.(через reactphp сразу, но через стандарно socket минут 5 надо) Коротко это костыль, а не решение для production
перезагрузку сервера имел ввиду да, но это простое и быстрое решение, позволяющее не вникать в процессы происходящие в ОС --- Добавлено --- дело хозяйское. Я так, как вариант предложил --- Добавлено --- в тележку к нам захаживай)
вангую дело в пыхе: если б мусор был то росла бы оператива иль своп вангую ещё раз: дело в стороннем модуле полагаю, нужно увидеть пхпини и намёк что творит пыхоскрипт в часности мб вычисляешь невычислимое?