Jump to content

[Guide] Machine that can handle 1000+ online


Recommended Posts

I am writting this guide for people who use windows server 2003. This will mostly also apply to people who use other versions of windows.

 

1.Hardware/OS

 

Before doing anything, you should have a look at your server hardware. A intel pentium core 2 duo with 2 gb ram may look nice but with l2j, its not.

Although this is budget based and you will probally build up some nice server allong the way of having a private server, you will need some powerfull hardware to support 1000+.

Currently i am using this configuration:

 

Cpu: Quad Core Xeon 3220 - 2.40GHz (Kentsfield) - 2 x 4MB cache

MBram: 8 GB DDR2 667

HDD: 73GB SA-SCSI 15K RPM

HDD2: 73GB SA-SCSI 15K RPM

Connection: 1000mbit up/down

OS: Windows server 2003 64bit RC2

 

You might think that cpu power is all that matters when hosting a gameserver but in fact, your harddisk and ram are way more important.

If you want to run more then 600 players with 0 lag i am advicing you to go for 15k rpm hdds. I have two of them and without these i wouldnt be able to run 1000+.

The first harddisk is running my windows and has all my program files on it etc. The second harddisk is dedicated for my database. If you want performance you

should always do this. Will increase acces time allot and as l2j with allot of player on has many writes/reads its a must if you want lag free gameplay.

About the ram, 6 Gb should do fine have run on that for a long time.About the connection, 100mbit is more then enough.

 

OS, well i recommend using the 64bit version of windows server 2003. This way you can run your java and mysql in 64 bit wich speeds it up a bit.

Also, you can allocate more ram to your startup file but i will tell more about this later on.

 

 

2.Windows server 2003

 

So lets see, we got a awesome server machine wich is up and running with windows server 2003. I think we are ready for some configuration changes for windows.

The first thing you need to change is the resource allocating. Windows server sets it to background services by default.]

Although this might be very good for stuff like Exchange, we dont want it like this.

 

1.Other mouse button on my computer and select properties(new window will popup)

2.Click on the "Advanced" tab

3.You will see Performance with a button "settings...." Click on it.(new window will open)

4.Click on the "Advanced" tab

5.Now set Processor scheduling and Memory usage to "Programs".

6.Press apply and dont close the window yet cause we are also gonna change the pagefile size.

 

Ok now the resource allocation is correct. Now we are going to change the pagefile size. The pagefile is windows virtual memory wich is stored on the harddisk.

As the pagefile is used allot we want to increase it and we want to set it to a set value. That means setting the initial size the same as the maximum.

This is done cause this way you want have fragmentation with your page file and your hardisk doesnt have to resize it all the time wich creates extra reads and writes.

Lets continu where we left the Advanced tab open.

 

7.You will see Virtual Memory with a button that says "Change". Click on this.(New window will popup)

8.Now set it to custom size.

9.Windows advices you to take 1.5x your ram size as your page file. I am not following this and i am setting mine on 6114. Make sure that the initial size and maximum size are the same!

10.Once you have filled in the two valeus, press set and then apply.

11. Apply all and restart your computer.

 

If you want to give the pagefile optimal performance and you got an harddisk unused you can also change the location of the pagefile. This will give it a little bit more performance.

 

 

3.Mysql

 

Well well, we are at MySql now. Most people hate changing the config files but its really needed if you want a nice server.

Im not an expert with this but hours of reading and watching mysql workshops i came up with some stuff wich needs to be changed.

I will post parts of the Mysql config i am using so you will know what you need to change.

Although the main resource mysql wants is ram its not needed to set giant values at the ram settings.

This will only create a unwanted giant space usage in your page file. Just keep a look at the size of your database regulary and change the size of the ram setting according to it.

(example: My database is 200 mb in total, i will set my ram usage size to 512mb).

 

Shutdown your Mysql before changing anything!!!

 

Ok open your my.ini

(text between ----->blaatblaat<--- are my comments!

 

First setting you should check:

# The default storage engine that will be used when create new tables when

default-storage-engine=INNODB

 

-------->Set this to a high value, something like mine.

# The maximum amount of concurrent sessions the MySQL server will

# allow. One of these connections will be reserved for a user with

# SUPER privileges to allow the administrator to login even if the

# connection limit has been reached.

max_connections=600

 

 

-------->This can be set at 0, not used by l2j and only slows it down

# Query cache is used to cache SELECT results and later return them

# without actual executing the same query once again. Having the query

# cache enabled may result in significant speed improvements, if your

# have a lot of identical queries and rarely changing tables. See the

# "Qcache_lowmem_prunes" status variable to check if the current value

# is high enough for your load.

# Note: In case your tables change very often or if your queries are

# textually different every time, the query cache may result in a

# slowdown instead of a performance improvement.

query_cache_size=0

 

 

------>If your tables are getting big, you should locate more to this.This should be more then enough though!

# Maximum size for internal (in-memory) temporary tables. If a table

# grows larger than this value, it is automatically converted to disk

# based table This limitation is for a single table. There can be many

# of them.

tmp_table_size=256M

 

--------->setting this to 8mb is more then enough

# Additional memory pool that is used by InnoDB to store metadata

# information. If InnoDB requires more memory for this purpose it will

# start to allocate it from the OS. As this is fast enough on most

# recent operating systems, you normally do not need to change this

# value. SHOW INNODB STATUS will display the current amount used.

innodb_additional_mem_pool_size=8M

 

------>This one is tricky and i dont know wich one is the best, never had time to test it allot.

------>I do know that if you set it to "0" it will create major I/O spikes

------>I havent had any problems using option "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

 

------->Not needed to be any higher then 16Mb, comment of mysql explains it

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

 

--------> Set this to the ammount of ram you have free for your database. At mine, 1024 is enough.

# 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

 

----------> I have always set this to 50% of my innodb_buffer_pool_size.

----------> Remember if you change this you need to delete your log files in order to start mysql again.

----------> They are located here: MySQL Server 5.0\data

----------> you should delete ib_logile0 and ib_logfile1 if you change this.

# 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

 

--------->The thread concurrency depends on your hardware.

--------->you should play around with it a bit but if you cpu is a powerfull one you can easily set this to 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

 

-----> Setting so mysql uses your memory instead of the pagefile

memlock

 

-----> Creates a file for every table. this creates a minor performance boost

-----> Remember, if you want this setting to work you have to add it to your config and then re-import your database again.

-----> Only that way it will create a file per table.

innodb_file_per_table

 

 

Ok that should cover mysql. I recommend getting a dedicated hardisk for your database. This will improve performance ALLOT!.

 

 

 

4.L2j Threadpool config

 

Well we are getting there, only a couple of things left to do and your good to go.Lets start with the threadpool config.

Here is defined how much threads can be created(Correct me if im wrong!).These settings have always been a mistery to me so i have experimented allot with them.

Before setting them really high you should once again consider your cpu. Dont set them to high if you dont have a fast cpu.

 

Open your options.properties file and look for this:

 

# ================================================== ===============

# Threads configuration - Take care changing this

# ================================================== ===============

 

ThreadPoolSizeEffects = 50

ThreadPoolSizeGeneral = 65

 

#Default 2

UrgentPacketThreadCoreSize = 10

#Default 4

GeneralPacketThreadCoreSize = 20

#Default 4

GeneralThreadCoreSize = 20

 

AiMaxThread = 20

 

------------------------------------------------------------------

 

I have set them 5x the normal values. This works great for my server but you should experiment with it.

Just start of with normal settings and see how it runs. If you think it lags and your cpu isnt used much just set it 2x normal values.

You should play around with this until you find a nice configuration for your hardware.

 

 

5.Other configurations

 

Ok now its time for some other configurations.

 

--------> This should not log items, wil suck up your I/O load. Logging chat well, also not doing that for the same reason.

# ================================================== ===============

# Logging features

# ================================================== ===============

# Logging ChatWindow

LogChat = False

# Logging Item handling NOTE: This can be very space consuming if enabled for all items.

LogItems = False

# Log GM actions

GMAudit = True

 

-------> Having them not running around can improve performance a bit

# Maximum range mobs can randomly go from spawn point

MaxDriftRange = 0

 

-------> Definitly set this to false!

# setting false can improve server performance on high rate servers

PreciseDropCalculation = False

 

-------> Dont know precisly wich is the best one but 1 has always worked great for me.

# This is setting of experimental Client <--> Server Player coordinates synchronization,

# 0 - no synchronization at all

# 1 - parcial synchronization Client --> Server only * using this option it is difficult for players to bypass obstacles

# 2 - parcial synchronization Server --> Client only

# 3 - full synchronization Client <--> Server

# -1 - Old system: will synchronize Z only

CoordSynchronize = 1

 

 

6.Startup parameters

 

Ok so everything is set to go just for one thing, your java startup parameters.

This is just like the thread pool config, they should be configured for your hardware.

There are a couple of things you need to think about.

First, if you have 32 bit java you cannot set your xmx and xms higher then 1536

Second, the -server parameter. You should only use this if you have 2 Cores or more and more then 2 GB ram! If you dont DO NOT USE this parameter.

The difference between starting your server in -server mode is that it runs waaaaaay better. Will have less lag and better resource usage. So if you can, always use this.

Other settings like ram all depend on how much you got. You should set these setting according to your ram size: -Xmx4096m -Xms2048m -Xmn1024m -XX:PermSize=256m.

At my server this works great and i havent touched this for ages.

 

 

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 -------------------------------------

 

 

Ok thats it, a guide to configurate your server to be able to run 1000+ players. I have done it myself with this config with almost no lag.

If someone has a comment on it please let me know, also when you think i made a mistake or something.

The grammer in it well, dont have time to check it all so sorry if its not correct. Have fun with your gameserver.

 

Credits to nitrozik

Link to comment
Share on other sites

You 're an epoch up man from the Greeks connections...You have more than me 999 connection...I have 1 mb and pay it a lot of money compared to other countries,that's unfair,but Greece should make something better for internet...(Forgive for going out of topic,but I feel very dissapointed here in Greece..)

Link to comment
Share on other sites

fix the guild --- machine that can handle 1000+ online not make your server +1000 players you can't be sure that 1000 players will join so the thread name is confusing.

Link to comment
Share on other sites

1st this is not his pc feelmyspells as he told is from Credits to nitrozik member of rz.

2nd thats a great guide and thats good to posting that here :)

3rd you have any idea where i can find 15krpm hd?i found only on 10krpm..if you can please send me the site in pm .

Link to comment
Share on other sites

look i found a GREEK company wich give you 1TB internet connection. If you need the website off the hoster just tell it

------------------------------

 

oh oh you mean the xxxxx company that rents Tb lines from XXXXX company in uk? :P:P:P:P:P:P:P:P

 

yes i know her also but from xxxxxx company uk is cheaper you know than the greek one :D more search and dont write whatever you listen

Link to comment
Share on other sites

  • 7 months later...

nice guide, but, a 1TB conecction? wow, i used to think (until now) that the fastest conection (direct pc-pc) was 250MB... (maybe you are meaning Tbits and not TBytes) anyway, thnx for the guide is very very useful.

Link to comment
Share on other sites

nice guide, but, a 1TB conecction? wow, i used to think (until now) that the fastest conection (direct pc-pc) was 250MB... (maybe you are meaning Tbits and not TBytes) anyway, thnx for the guide is very very useful.

 

warned for Bumping.

Link to comment
Share on other sites

The Idea of only having 2 HDD's and expecting your server to perform better is a joke - its better to actually have your HDD's in a RAID 10 with 4 HDD's at 10K rather then 2 at 15K RPM... Its faster, but it takes more power =/

Link to comment
Share on other sites

BS! two single, non raided disks will perform way better than a Raid 10 based system.

 

Raid 10 writes the same content to two drives. It's basicly Raid 1 + 0, Write the same data twice, part it onto 4 drives.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


×
×
  • Create New...