Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Открытие консоли сервера вызывает высокую нагрузку процессом PHP #23

Open
r4sas opened this issue Nov 13, 2019 · 7 comments
Labels
bug Something isn't working feature Features and ideas

Comments

@r4sas
Copy link

r4sas commented Nov 13, 2019

Не знаю где именно в коде происходит это, но FPM начинает нагружать ядро до 70%

Возможно что не очень хороший алгоритм фильтра последних записей лога.

@et-nik
Copy link
Owner

et-nik commented Nov 13, 2019

Получение лога записей происходит вот тут:
https://github.com/et-nik/gameap/blob/develop/app/Services/ServerService.php#L156

Там же происходит и обрезка текста консоли.

Как долго работал игровой сервер? В корне игрового сервера есть файл output.txt каков его размер?

@et-nik
Copy link
Owner

et-nik commented Nov 13, 2019

Предполагаю, что output.txt скопил довольно много записей и стал большого размера.

Сам принцип да, далеко не самый лучший, PHP-FPM нужно получить содержимое файла, а затем его обрезать. Можно переложить эту обязанность на GDaemon, он справится с этим легко не требуя много.

@r4sas
Copy link
Author

r4sas commented Nov 13, 2019

Как долго работал игровой сервер? В корне игрового сервера есть файл output.txt каков его размер?
Предполагаю, что output.txt скопил довольно много записей и стал большого размера.

Достаточно много, вес под 3 гига)))

Можно переложить эту обязанность на GDaemon, он справится с этим легко не требуя много.

Я бы сказал что в общем против output.txt - файл в постоянной блокировке на запись, его невозможно подчистить (даже с помощью logrotate). Если бы был алгоритм лимитирования веса файла самим демоном - другое дело.
Но в идеале вижу решение следующего вида:

  1. Возможность включать/выключать хранение лога в output.txt
  2. Возможность задать лимит веса файла (зачем хранить весь вывод? Его только если в отладочных целях при падении иметь, чтобы знать причину падения, например.)
  3. При запросе консоли в панели производить запрос к GDaemon и в нем формировать буффер выведенных сервером строк (в памяти), который будет отправляться в ПУ с переодичностью в N секунд (конфигурируемо на уровне выделенного сервера).

Последний пункт скорее всего придется реализовывать на вебсокете.

@r4sas
Copy link
Author

r4sas commented Nov 13, 2019

Ну и дополнительно:
https://gist.github.com/deizel/3846335
Не знаю как быстр substr, но скорее всего лучше лимитировать по строкам.

Можно ли не вычищать буффер конфсоли на странице, а дополнять его, если будет реализован вывод по строкам? Аналогично не хватает возможности переключения в более полноразмерный режим, а то это окошечко не всегда удобно =)

@et-nik et-nik added the feature Features and ideas label Nov 13, 2019
@et-nik
Copy link
Owner

et-nik commented Nov 14, 2019

Подумывал вернуться обратно к Screen, но использовать не ту версию, что в дистрибутивах Debian, Ubuntu, CentOS. В дистрибутивах сейчас старая версия Screen и есть баги с русской кодировкой.
А более свежую версию использовать, где нет багов из-за которых я отказался от Screen. Но тогда пакеты нужно самому собирать.

В Screen есть лимиты и есть возможность сохранить лог в файл. Удобная.

С вебсокетами всё равно придётся дело иметь, т.к. консоль будет на них переведена рано или поздно.

@et-nik et-nik added the bug Something isn't working label Nov 14, 2019
@r4sas
Copy link
Author

r4sas commented Dec 11, 2019

А можно ли приделать к gameap-starter команду очистки лога?
Чтобы можно было хотя бы с помощью logrotate вызывать.

Добавить поддержку сигнала USR1 по поторому бы вызывался std::ofstream::trunc.

@et-nik
Copy link
Owner

et-nik commented Dec 12, 2019

Да, можно

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working feature Features and ideas
Projects
None yet
Development

No branches or pull requests

2 participants