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 такое место точно есть на дочитке пакетов, а также несколько раз натыкался на всяких "сторонних" примочках, типа выдавателей бонусов за голоса, встроенных в сервер, и т.д.
ЗЗЫ: а еще полездно иногда перед тем, как что-то писать многониточное высоконагруженное приложение, сначала почитать про синхронизацию данных и ниток хотя бы в инете и вообще про проблемы, связанные с такого рода задачами. Полезно бывает