Есть бот для онлайн игры. На каждого персонажа создается отдельный процесс (демон). При работе около 20 таких процессов оперативной памяти используется около 500 мб.
Есть ли варианты как уменьшить потребление оперативной памяти на сервере?
memory_get_usage() говорит 400 кб, но на деле за 15 мб
Как вариант - посмотрите в сторону zRam, чтобы уменьшить занимаемый объём RAM. Но в этом случае - вы будете оплачивать экономию нагрузкой на CPU.
Через nginx распределите нагрузку на несколько серверов. Но в таком случае Вам придётся выделить отдельный сервер под БД и файловое хранение (не обязательно, но желательно), а так же решать проблему с пропускной способностью сети.
Смотри memory_get_peak_usage() - он покажет максимальное значение которе используется.
Скорее всего помять отжирает массив данных полученныйх из БД. И используй fetch_row.
Показывает почти 1мб. С БД данных мало и храню их в memcached.
Можно вопрос. Если демон занимает допустим 1мб, но он обращается и классу который тоже жрет 1мб, в итоге будет ведь 2мб? А потом там и 3мб если еще классы и т.д.?
romaaa32, если memory_get_peak_usage показал 1мб - то значит так оно и есть.
Возможно что один процесс создает дополнительные параллельные процессы - которые пожирают остальную память.
Значительную часть в памяти съедают не классы, а объекты от этих классов.