Статья написана не мной и много где есть в английском ввиде. Также есть автоматические переводы. Я сделал читабельный вариант)
Статья актуальная для Windows 2003!
1.Hardware/OS
Чаще всего под сервер используется железо типа Core2Duo с 2-4 гигами оперативной памяти.
Для онлайна в 1000 человек этого мало. Я рекомендую брать серверные решения , например у меня стоит:
Код:
Процессор: Quad Core Xeon 3220 - 2.40GHz (Kentsfield) - 2 x 4MB cache
Оперативная память: 8 GB DDR2 667
Жёсткий диск: 73GB SA-SCSI,15000 скорость оборотов дисков(RPM)
2-ой Жёсткий диск: 73GB SA-SCSI,15000 скорость оборотов дисков(RPM)
Internet: 1000mbit
Windows: Windows server 2003 64bit RC2
Не так важен процессор для сервера как его харддиски.
Для онлайна в 1к человек, нужно ставить
SAS или
SCSI диски со скоростью вращения шпинделя 15к. У меня на данный момент стоят два таких жёстких диска.
На первом у меня Windows и программы.
На втором база данных сервера. Всегда держите базу данных на отдельном диске!
Оптимальный объем оперативы 6 гигабайт.
Для сервера нужен хороший интернет, 100мегабитного канала хватит.
Я рекомендую использовать Windows Server 2003 64 bit. В 64битной версии
MYSQL и JAVA работают быстрее и можно больше выделить памяти серверу и
базе. Но об этом позже.
2.Windows Server 2003 x64
Ну чтож, считаем что у нас есть хорошая серверная машина с Windows 2003.
Windows изначально выделяет больше оперативы внутренним службам, работающим в фоновом режиме. И это надо менять:
Код:
1.Нажмите правой кнопкой мыши на мой компьютер и выберите Свойства
2.Кликните на вкладку "Дополнительно"
3.Вы увидите окошко Быстродействие с кнопкой «Параметры» Нажмите на нее. (Новое окно)
4.Кликните на вкладку "Дополнительно"
5.В данном окне щёлкните на вкладку Дополнительно.
6.Тут вы видите «Распределение времени процессора и использование памяти» поставьте везде «Программ».
Теперь мощности распределяются правильно. Нам нужно выделить больше виртуальной памяти под систему.
Код:
1.Нажмите правой кнопкой мыши на мой компьютер и выберите Свойства (появится новое окно)
2.Кликните на вкладку "Дополнительно"
3.Вы увидите окошко Быстродействие с кнопкой «Параметры» Нажмите на нее. (Новое окно)
4.Кликните на вкладку "Дополнительно"
6.В самом низе раздел "Виртуальная память",в данном разделе нажмите изменить.
7.Появится новое окно,в данном окне выберите свой жёсткий диск,
где у вас стоит ваш сервер,когда выбрали диск с сервером,
то чуть ниже выберите "Размер файла подкачки для выбранного диска",выберите пункт "Особый размер".
8.Появятся два окошечка для ввода:
Исходный размер(Мб):
Максимальный размер(Мб):
В данных полях вы вводите количество общей оперативной памяти делённой на 1,5
Т.е. в данный момент у меня 8,5 гигабайт оперативной памяти,я делю 8500 на 1,4
Получается примерное значение: 6100 гигабайт
Данное примерное значение вводим в обоих окнах:
Исходный размер(Мб): 6100
Максимальный размер(Мб): 6100
Проверьте что вы поделили верно и вписали в оба окна,одинаковые значения.
После чего нажмите Ok.
9.Закройте все окна и перезагрузите компьютер.
Если есть пустой хард, то советую использовать его под файл подкачки.
На этом настройка на данном этапе закончена.
3.MySql
Внимание настройки конфигурация производятся в файле конфигурации mysql:
my.ini
Жизненно необходима настройка мускула, иначе лаги начнутся уже при онлайне в 300 человек.
Хотя я и не спец по мускулу, но пару советов дам.
Я буду показывать части из моих конфигурационных файлов mysql, для наглядности.
Несмотря на то, что mysql требует много оперативной памяти, ее нужно выделять с умом!
Иначе вы получите переполенный буфер и как следствие лаги!
Вам нужно всегда знать, сколько весит ваша база данных, и регулярно менять размер потребления ею оперативны.
Пример: Моя база данных весит 200 МБ, потому устанавливаю размер оперативной памяти на 512МБ.
Отключите ваш Мускул перед любыми настройками.
Текст типа --------> чтото умное <-------- мои комментарии.
Для начала проверим предустановки:
Находим в файле my.ini строчку:
default-storage-engine=INNODB
Если данной строчки нету, значит ищем :
default-storage-engine=
Пояснение:
default-storage-engine- Указывает какой движок использован для создания таблиц mysql .
INNODB-стандартная,версия движка для создания таблиц mysql
--------> Максимальное количество коннектов к mysql. Код:
# Максимальное количество конкурирующих сессий сервер MYSQL будет
# позволять подсоединяться. Одна из этих связей будет резервироваться для потребителя с
# наивысшими привилегиями, т.е. для администратора, даже если
# предел связи был достигнут.
max_connections=600
-------->Оптимально поставить: 500-600 для онлайна в 500-600 человек. -------->Это нужно установить на значение 0,так как это не используется в l2j серверах и только замедляет работу сервера. Код:
# Данная опция подаёт запрос на кеширование сервера в оперативную память и количество памяти для к
кэширования.1=включено,0=выключено.
query_cache_size=0
------> Если ваши таблицы становятся большими, нужно поставить более большее значение чем есть,т.е. если ваша таблица весит 200 мб,то нужно поставить в 2 раза больше т.е. 512.
--------->
Это дополнительная память которая выделяется для таблиц в случае если
они больше указанного значения table_cache,настройка на 8mb более чем
достаточно Код:
innodb_additional_mem_pool_size=8M
------>Хз для чего нужная эта фишка, тестить не хочу.
------>Но знаю точно что выставив 0 будут проблемы с I/O spikes
------>Потому юзаю "2" Код:
# If set to 1, InnoDB will flush (fsync) the transaction logs to the
# disk at each commit, which offers full ACID behavior. If you are
# willing to compromise this safety, and you are running small
# transactions, you may set this to 0 or 2 to reduce disk I/O to the
# logs. Value 0 means that the log is only written to the log file and
# the log file flushed to disk approximately once per second. Value 2
# means the log is written to the log file at each commit, but the log
# file is only flushed to disk approximately once per second.
innodb_flush_log_at_trx_commit=2
------->Нет смысла ставить больше 16мегов. Код:
The size of the buffer InnoDB uses for buffering log data. As soon as
# it is full, InnoDB will have to flush it to disk. As it is flushed
# once per second anyway, it does not make sense to have it very large
# (even with long transactions).
innodb_log_buffer_size=16M
-------->
Если на сервере есть свободная оперативная память, то здесь можно
увеличивать значения, что благотворно скажется для базы. В моем случае
достаточно 1024 мб. Код:
# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
innodb_buffer_pool_size=1024M
----------> Я всегда выставляю тут половину от моего innodb_buffer_pool_size.
----------> Помни, если менять этот конфиг, то нужно выключить мускул и удалить логи.
----------> Логи находятся : MySQL Server 5.0\data
----------> удалите ib_logile0 and ib_logfile1 Код:
# Size of each log file in a log group. You should set the combined size
# of log files to about 25%-100% of your buffer pool size to avoid
# unneeded buffer pool flush activity on log file overwrite. However,
# note that a larger logfile size will increase the time needed for the
# recovery process.
innodb_log_file_size=512M
--------->Данные настройки зависят напрямую от мощности вашего проца.
--------->Будьте очень осторожны меняя тут значения. Двигайтесь
потихоньку. Если процессор как у меня, то смело выставляйте «60» Код:
# Number of threads allowed inside the InnoDB kernel. The optimal value
# depends highly on the application, hardware as well as the OS
# scheduler properties. A too high value may lead to thread thrashing.
innodb_thread_concurrency=60
-----> Делаем что бы мускул кушал только оперативку вместо файла подкачки. -----> создается отдельная таблица для каждого файла. это создает хорошее повышение производительности сервера
-----> Помните если вы что либо изменили в конфигурации mysql,то вам нужно заново импортировать все таблицы/файлы в mysql.
-----> Создайте базу с таким название и оставьте её пустой. Код:
Название:
innodb_file_per_table
Хорошо
я разъяснил все, что касаться mysql. Я рекомендую купить отдельный хард
под базу данных. Это позволит повысить производительность.
Поехали дальше.
4.L2j Threadpool config
Настройка в конфигурации сервера.
Итак мы на финишной прямой, для начала нужно оптимизировать настройки threadpool .
В данном конфиге определяются сколько потоков может быть создано. Эти параметры всегда были загадкой для меня.
Менять данные параметры можно при условии, что у вас мощной процессор, иначе даже не пытайтесь.
Откройте ваш options.properties файл и найдите:
Код:
# ================================================= = ===============
# Настройка threadpool - Будьте осторожны, изменяя это
# ================================================= = ===============
ThreadPoolSizeEffects = 50
ThreadPoolSizeGeneral = 65
По умолчанию # 2
UrgentPacketThreadCoreSize = 10
# по умолчанию 4
GeneralPacketThreadCoreSize = 20
# по умолчанию 4
GeneralThreadCoreSize = 20
AiMaxThread = 20
-------------------------------------------------- ----------------
Мне подходят значения в 5тикратном размере от стандартных.
Начните со стандартных значений и посмотрите как это работает.
И потом начинайте медленно изменять характеристики ,для начала выставите в 2хкратном размере.
Т.е. умножьте стандартные настройки данной конфигурации на 2,и сохраните файл.
5.Прочие конфиги
Кое что влияющее на загрузку проца и памяти.
--------> ЛОГИ Код:
# ================================================= = ===============
# Конфигурации логов
# ================================================= = ===============
# Настройка логов чата всего мира (true=влючено,false=выключено)
LogChat = False
# Настройка логов сбора дропа,спойла,итемов,ресурсов и прочего.(true=влючено,false=выключено)
LogItems = False
# Настройка логов ГМ-ов,пишит логи всех действий Гмов.(true=влючено,false=выключено)
GMAudit = True
-------> Чем меньше это значение, тем меньше нагрузки на процессор. -------> установка в false может улучшить работу серверов с высокими рейтами Код:
PreciseDropCalculation = False
# Данная настройка это эксперементальная синхронизация между Клиентскими <-и-> Серверными координатами игрока,
# 0 - нет синхронизации ВООБЩЕ !!!
# 1 - Частичная синхронизация от клиента -к-> серверу
# 2 - Частичная синхронизация от Сервера -к-> клиенту
# 3 - Полная синхронизация Клиента <-и-> Сервера
# -1 - Старая система синхронизации: Только по оси Z
CoordSynchronize = -1
6.Стартовые файлы.
Теперь поговорим о выделении памяти под ява процессы.
Есть не сколько фактов которые вы должны знать:
1. Если у вас 32х битная ява, не выставляйте значения для xmx and xms больше 1536 мегабайт.
2. Параметр –server можно выставлять при условии, что у вас двухядерный процессор и оперативы больше 2 гигабайт.
Код:
-Xmx4096m-Xms2048m-Xmn1024m-XX:PermSize=256m
Данный
параметр указывает на то, что ваш компьютер может использовать максимум
4 гигабайта для сервера,и минимум 256. Вы должны отредактировать данные
настройки под свой компьютер. Если у вас есть мощный сервер и много
оперативной памяти, вы можете эксперементировать над данными конфигами.
На моём сервере всё работает прекрасно, поэтому я не менял данный конфиг.
Код:
startgameserver.bat
title Game Server Console
:start
echo Starting L2J Game Server.
echo.
REM -------------------------------------
REM Default parameters for a basic server.
REM java -Xmx1024m -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer
REM
REM If you have a big server and lots of memory, you could experiment for example with
java -server -Xmx4096m -Xms2048m -Xmn1024m -XX:PermSize=256m -XX:SurvivorRatio=8 -Xnoclassgc -XX:+AggressiveOpts -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer
REM -------------------------------------
Надеюсь, что Вам это поможет!
Удачной вам работы над сервером.