Показать сообщение отдельно
Непрочитано 11.01.2011, 16:15   #23
Пользователь

По умолчанию Re: Очень большая нагрузка на процессор

120% нагрузки - это нормальная ситуация в nix-системах... 100% - это полная загруженность одного ядра.
А по поводу "большая нагрузка" скорее всего это из-за холостых бесконечных циклов (как-раз один такой слопает одно ядро и будет 100% + 20% от остального). И уменьшение нагрузки при увеличении онлайна тоже вполне объяснимо - меньше времени ядро начинает проводить в пустом бесконечном цикле.
Пример псевдохолостого цикла (безотносительно какой-либо сборки, из головы написал, чтоб объяснить проблему):
Код:
while (true) {
    if (GameServer.getPlayers().size() > 0) {
        // что-нить делаем с плеерами
    }
}
Если плееров нету, то получаем холостой цикл (читай - 100% на одно ядро).
Можно поискать по коду (ядро/скрипты/etc) такие или похожие конструкции, и искоренить их.
Код:
while (true) {
    GameServer.playerMonitor.wait();
    if (GameServer.getPlayers().size() > 0) {
        // что-нить делаем с плеерами
    }
}
// и в методы добавления-удаления плееров после, 
// собственно, операции над плеером воткнуть
GameServer.playerMonitor.notify();
это так, самый простой фикс. Получим "залипание" псевдобесконечного цикла на wait()-е до первого вызова notify() у объекта-монитора, т.е. вместо 100% на одном ядре - "засыпание" нитки с этим циклом до реального изменения данных.

ЗЫ: не знаю, как в aion-е, а в mmocore из la2 такое место точно есть на дочитке пакетов, а также несколько раз натыкался на всяких "сторонних" примочках, типа выдавателей бонусов за голоса, встроенных в сервер, и т.д.

ЗЗЫ: а еще полездно иногда перед тем, как что-то писать многониточное высоконагруженное приложение, сначала почитать про синхронизацию данных и ниток хотя бы в инете и вообще про проблемы, связанные с такого рода задачами. Полезно бывает
Blakkky вне форума Ответить с цитированием