Open r4sas opened 4 years ago
Получение лога записей происходит вот тут: https://github.com/et-nik/gameap/blob/develop/app/Services/ServerService.php#L156
Там же происходит и обрезка текста консоли.
Как долго работал игровой сервер? В корне игрового сервера есть файл output.txt
каков его размер?
Предполагаю, что output.txt
скопил довольно много записей и стал большого размера.
Сам принцип да, далеко не самый лучший, PHP-FPM нужно получить содержимое файла, а затем его обрезать. Можно переложить эту обязанность на GDaemon, он справится с этим легко не требуя много.
Как долго работал игровой сервер? В корне игрового сервера есть файл
output.txt
каков его размер? Предполагаю, что output.txt скопил довольно много записей и стал большого размера.
Достаточно много, вес под 3 гига)))
Можно переложить эту обязанность на GDaemon, он справится с этим легко не требуя много.
Я бы сказал что в общем против output.txt
- файл в постоянной блокировке на запись, его невозможно подчистить (даже с помощью logrotate
). Если бы был алгоритм лимитирования веса файла самим демоном - другое дело.
Но в идеале вижу решение следующего вида:
output.txt
Последний пункт скорее всего придется реализовывать на вебсокете.
Ну и дополнительно: https://gist.github.com/deizel/3846335 Не знаю как быстр substr, но скорее всего лучше лимитировать по строкам.
Можно ли не вычищать буффер конфсоли на странице, а дополнять его, если будет реализован вывод по строкам? Аналогично не хватает возможности переключения в более полноразмерный режим, а то это окошечко не всегда удобно =)
Подумывал вернуться обратно к Screen, но использовать не ту версию, что в дистрибутивах Debian, Ubuntu, CentOS. В дистрибутивах сейчас старая версия Screen и есть баги с русской кодировкой. А более свежую версию использовать, где нет багов из-за которых я отказался от Screen. Но тогда пакеты нужно самому собирать.
В Screen есть лимиты и есть возможность сохранить лог в файл. Удобная.
С вебсокетами всё равно придётся дело иметь, т.к. консоль будет на них переведена рано или поздно.
А можно ли приделать к gameap-starter команду очистки лога? Чтобы можно было хотя бы с помощью logrotate вызывать.
Добавить поддержку сигнала USR1 по поторому бы вызывался std::ofstream::trunc
.
Да, можно
Не знаю где именно в коде происходит это, но FPM начинает нагружать ядро до 70%
Возможно что не очень хороший алгоритм фильтра последних записей лога.