- You've come here because you're interested in making adjustments to tweak server performance.
- Well it's a good thing that you're here because as a server administrator it is a responsible thing to be concerned about.
- There are many ways that you can improve the overall performance of the server, and honestly you can over analyze tweaking performance to where you lose sight of things that you probably should be working on or concerned about.
- What I'm about to share with you is everything that I've done to optimize the EZ Server to sustain 500+ player population with minimal stress load on the server.
- Someone who is experienced may look at this, and think something COULD be added here and I encourage that, but quite frankly I've covered a good 90% of things that can be achieved within a reasonable amount of time. Anything else is going to need to be done at the source code level which is a task for optimization tweaks in itself.
§Before You Get Crazy
- Let me just make this statement before you start thinking you need to buy a bunch of crazy hardware and network stuff, EQEmu can run on a toaster.
- It could run on a Galaxy Android phone and probably hold up to 100 people no problem given you had a decent connection.
- There are a ton of factors that play into what you really need hardware wise versus player size but really when it comes down to it.
- A 1-150 player server could run a fairly decent desktop computer, running and running well are gray areas of both hardware and software optimization
- Most of these assumptions will be made that you're running a PEQ server, which is EQ vanilla and there's nothing crazy going on there
§Network Requirements Reference
- Your download doesn't need to be super crazy, but it needs to be adequate and typically mirror your upload capacity
- These values below represent what I've seen typically, a lot of the time you will hardly transmit more than 1 Mbps, but this varies based on what is going on in the server once again
||1-3 Mbps Upload Burst
| 50 - 200 Players
||2-5 Mbps Upload Burst
|200 - 600 Players
||5-10 Mbps Upload Burst
- The database is one of the biggest areas for opportunity in increasing overall server performance.
- Optimum I/O performance can be achieved from 15k Cheetah HDD drives or SSD drives and running the database on it. EZ server uses Raid0 x 2 SSD's but that means one hard drive failure loses all data, this data gets backed up regularly to another hard disk drive and backed up remotely so those are considerations you need to take in on your own. Your speed is considered in IOPS and latency, use HD Tune Pro to benchmark.
- You achieve software performance by optimizing your MySQL or MariaDB config.
- I personally recommend using MariaDB as your database engine, it is 1-1 a MySQL server but has quite a bit in performance gains, EZ Server also uses this database engine.
- MySQL/MariaDB configuration is usually stored in my.ini inside of the program installation folder of the DB server
- MariaBD my.ini is located under the /data folder inside the install directory
- MySQL my.ini located in top level installation directory
- Here are some guides that also explain what is important in tuning MySQL performance:
- You don't have to use what I use, but this is what I have currently being used for the EZ Server using MariaDB
- This configuration has specific caching sizes in mind to an Emulator server and what is truly appropriate for cache sizes
- Most configurations do NOT have caching enabled by default which is a HUGE factor in performance
- You will need to change your datadir to where your data folder is stored, usually this is in your default MySQL server storage directory
# CLIENT #
port = 3306
socket = C:\Program Files\MariaDB 10.0\data\mysql.sock
# GENERAL #
user = mysql
default-storage-engine = InnoDB
socket = C:\Program Files\MariaDB 10.0\data\mysql.sock
pid-file = C:\Program Files\MariaDB 10.0\data\mysql.pid
# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP
# SAFETY #
max-allowed-packet = 16M
max-connect-errors = 1000000
# DATA STORAGE #
datadir = F:\MariaDB\data\
# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
max-connections = 2000
thread-cache-size = 100
open-files-limit = 65535
table-definition-cache = 4096
table-open-cache = 1000
query-cache-type = 1
query-cache-limit = 256K
query-cache-min_res-unit = 2k
query-cache-size = 80M
# INNODB #
innodb-log-files-in-group = 2
innodb-log-file-size = 256M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = 1G
§Only Using the Amount of Zone Servers You Need
- Don't use a crazy amount of zone servers if you don't need them, they take up chatter on the machine albeit light and they take up memory as well. Everything that you can do to reduce uneeded resources but not run yourself scarce is a good practice
§Build Server Binaries With Minimal Logging
- If you want your server to performance snappy and clean, you do not want logging weighing down your I/O disk performance when you don't look at most of it most of the time
- This performance gain is larger than one would realize, especially when you scale many zone servers there are an insane amount of hits to logs
- As of 2-2-2015 this guide has been changed to reflect the new log system
- If you run your logsys_categories table off of the default settings, it should be more than adequate for not having logs invade your performance
§Update to the Latest 'Stable' Release
- We're always optimizing the source so if you haven't updated in the past year or so that is a huge opportunity for performance alone.
- The latest large improvement was the character blob being removed from the source
- Many other optimizations and tweaks are constantly being made in the source daily and large improvements have been made in the past year