Problemas de lag, empiezan a darme dolores de cabeza

Lo primero, buenas a todos, un gusto.

Os comento, llevo ya tiempo acarreando problemas de lag en mi servidor. Aproximadamente tengo una media de 150 - 200 jugadores, y se nota mucho el lag a esas cifras. Detecté que podía ser la empresa, que era de mala calidad, así que me cambié a otra. Desde ese momento se fue todo el lag, pero esos días de gloria duraron poco, ya que a los 10 días volvió otra vez el lag.

En principio no es lag constante, es decir, durante 10 segundos el servidor va bien, pero de repente y sin venir a cuento, lagazos de 2 o 3 segundos de duración cada uno, algo que molesta bastante.

Me gustaría que me dijerais que puedo hacer, ya que estoy desesperado con el temita, he probado muchas cosas y no sé si son correctas (ejemplo, desactivar los logs), pero nada.

Hay algo que estoy haciendo mal y que se me escapa y no sé el qué.

Desde ya, muchas gracias.

Cuales son las especificaciones de la maquina, es un VPS o un dedicado?

Dedicado, si se me permite decir cuál es, aquí lo pongo:

https://www.ovh.es/servidores_dedicados/sp_16g.xml

EDIT: También veo que dependiendo de lo que hagas, tienes más o menos lag, y no afecta a todos por igual. Es decir, si hay dos personas leveando, no tienen problema, pero si hay 15 en una BG pegándose entre ellos, se nota bastante. No sé si servirá de información que diga esto.

EDIT2: Si se necesita que proporcione algún tipo de información, dímelo, pero por si acaso diré lo obvio: Servidor Debian 64 bits, MySQL 5, 16 GB de RAM, Raid SOFT 0/1, y procesador i5 de 4 núcleos.

Pues el servidor esta bien, estas seguro que no estas compilando en Debug? mira a ver si hay algun programa usando demasiada CPU

Sólo el emulador un 35% de CPU, la máquina aparenta estar bien, por lo que tiene pinta de ser algo de core, no sé por qué.

Está compilado sin debug.

Hola, tu problema se pueden producir debido a muchas razones:

[ul][li]Si no posees una base de datos configurada adecuadamente o las características del servidor no son las adecuadas, retrasaran ocasionalmente el procesamiento en el emulador, lo que se traducirá en un congelamiento, principalmente por consultas sincrónicas. Por otro lado el emulador posee configuración de conexiones sincrónicas y asincronicas, las cuales, deben ser incrementadas, conforme incremente la población en el servidor. No tengo certeza como estar seguro si es tu caso pero probar incrementar la cantidad de hilos de conexiones, no te traerá problemas mientras no te excedas (Debes considerar la cantidad de conexiones disponibles en la configuración de tu base de datos). Además te recomiendo la utilización de mysqltuner (si es que utilizas MySQL :S), para revisar el desempeño de la base de datos.[/li][li]Si tu PlayerSaveInterval es demasiado bajo, puedes crear instancias de lag, pero es poco usual, sobre todo considerando que se trata de una cola de tiempo desde el ingreso del personaje. (Siempre y cuando el valor sea mayor a 5 minutos)[/li][li]MapUpdate.Threads es una configuración muy útil para poder dividir la carga de los mapas en diversos hilos y evitar la saturación en uno solo.[/li][/ul]

Debes estar atento a valores como los que se indican en “.server info”, especificamente el “diff”, que indica la carga del servidor, es aceptable bajo los 300, sobre eso se sienten retrasos, pero los que indicas deben estar sobre los 1000

Ante todo, gracias por responderme. Me ha servido mucho lo que me has comentado.

La configuración de la base de datos la tengo por defecto de cuando viene instalada, y probando lo que me has dicho de subir MapUpdate.Threads a 2, luego los SyncThreds y WorkThreads de Characters a 4 y 2 respectivamente, he notado un descenso considerable de esos lagazos que venían dándose. Eso sí, sólo ha durado 1 día, ahora vuelve a estar igual.

El servidor es bastante bueno, arriba está el link, y empieza a ponerme “mal” a raíz de 200 personas online.

Muchas gracias por adelantado.

Tu servidor tiene 4 núcleos, por lo tanto MapUpdate.Threads = 4, los SyncThreads y WorkThreads, también los subiría un poco más.

Hola,

Si se me permite colaborarte, al igual que los compañeros han expuesto hay varios factores conforme la población crece a tomar en cuenta para “tunear” el emulador y poder llegar a un rendimiento decente sin sacrificar otros aspectos o gastar demasiado dinero en un mounstro de máquina.

Complementando un poco el tema de DB:

[ul][li]Te recomiendo primero si estas en debian utlilzar un motor de base de datos llamado XtraDB, basicamente es un InnoDB pero tuneado, y la empresa que lo distribuye es PERCONA, este software es de distribución libre y es como un mysql tuneado, el apt-get hace todo, basta con saber instalarla, que no es tan dificil y estás del otro lado, este motor de base de datos le da MUCHISIMA y cuando digo muchisima es muchisisisisima mas velocidad y calidad al momento de trabajar con volúmentes de datos altos. Para ponerte un par de datos reales, con 780 pj mysql no abastece por mas hilos y parámetros que le tunees, es mas, hay parámetros que el mysql no acepta al menos para emuladores, con xtradb a cerca de 1200 pj recién te pide tunearlo, con la config original te aguanta tranquilamente los 900-1200 pj dependiendo de si es un SSD y la cantidad de núcleos de la máquina.[/li][/ul]

[ul][li]Sobre lo que son hilos y parámetros, hay dos que tres parámetros en las configs de mysql que podrías ponerle atención, principalmente hay que poner un pool de InnoDB y MyISAM al menos 2x mas grande que el tamaño de la db, porque cuando empieza a llegar al borde, pagína, y eso amigo mío es malo ya que las distros base de OVH traen un swap de 1.3GB como tope, lo que no te conviene, te dará muchos mas problemas. Asi que empieza por ahi, cuando digo pool son 5 cosas: innodb_buffer_pool_size, join_buffer_size, ( tiene estrecha relación con sort_buffer_size, read_buffer_size, read_rnd_buffer_size pero el más pesado en tc es el join)[/li][/ul]

[ul][li]Sobre tuneo extremo, hay 3 parámetros que quiero dejar aquí escritos para que lean y puedan llevar el tuning de la db a otro nivel, porque pasados los 1500pj la cosa se pone fea, y hay que meterle mucha caña a la db, los parámetros son: innodb_flush_method, innodb_table_locks, innodb_flush_log_at_trx_commit, y los 3 que más me gustan a mi: innodb_io_capacity, transaction-isolation, innodb_adaptive_checkpoint[/li][/ul]

Complementos en tema configuracion emu:

[ul][li]Sobre manejo de hilos para conexiones sincronicas/asincronicas, trata de llegar a poner la siguiente cantidad de hilos como tope en las configs, esto lamentablemente no está en la wiki y no se encuentra fácilmente en los foros de Trinitycore, pero si, lo explicó Machiavelli en su día y también hay logs de IRC regados por la internet que lo explican muy bien, aquí los datos: pon el workerthreads a un máximo de 2xN threads posibles, si tu nucleo aguanta 4 hilos por nucleo (en teoría, ahora parece ser que funciona hilos totales soportados) tu límiete de workerthreads será 8, para characers, world y auth, pero si estás en la misma máquina las 3 dbs, trata de distribuirlo entre los 3 los 8 hilos posibles asi por ejemplo: login = 1 characters = 6 world = 1, normalmente char es la que más transacciones demanda, ponle mucho ojo a eso.[/li][/ul]

[ul][li]Sobre manejo hilos por mapa, casi relativo a lo comentado arriba es que la cantidad de hilos max para el map.threading ha de ser hasta el tope hasta un 20% más, pero no mas de ahí ya que el core no hace buen handling de ello (recordemos que el nucleo usa 1 solo procesador físico en linux), y si metes mas de 4-5 hilos en este caso para los mapas, empezarás a tener comportamiento Y CRASHES no deseados y no válidos como backtrace para los issues de trinitycore. Con 3 hilos es más que suficiente para 500pj, si el worldserver empieza a comerte demasiado micro, bájale, pero tomando en cuenta esto último que te digo.[/li][/ul]

[ul][li]Sobre configs de worldserver, mas que nada los sistemas de consumo y transaccion de base de datos son los que más lento hacen el emu, a menos que tengas bucles en código y ahí si tu diff se dispara y el server no se cae hasta que freezea básicamente, hay que ponerle especial atención a los parámetros de worldserver que usan la db muy seguido, como es el save de pjs, normalmente con ponerlo a 15mins el rollback es aceptable, también como truco adicional yo te recomendaría retocar 4 cosas: wheater (no lo necesitas y si, consume mas de lo debido comprobado), DetectPosCollision desactivalo, eso carga y da lag, si disminuye la calidad pero no es grande la diferencia en jugabilidad en sí, o ponla a 5y para que no estime mucho el calculo, normalmente ese viene puesto en 1.5y, MaxOverspeedPings a 2, ya que no necesitas gente logueada AFK mas de 5-10mins en el server, eso da carga innecesaria en el mismo, me explico, este parámetro permite el check de tiempos que haces con otros parametros de si cuando un pj pasa mas de X tiempo afk, cuantas veces afk en tiempo está para kickearlo automaticamente, eso son pool de conexiones para otros jugadores activos que lo necesitan y se traduce en menos lag general en el reino, ese yo lo tengo en 2 y por último el más importante GridUnload, ese tiene que estar en 0, fijo, cuando tu población crece, los mapas (cargados) en la ram, se vuelven de uso muy frecuente asi que tenerlos pre-cargados en la misma le da una ventaja especial, aparte de que haces que el núcleo (la mayoria de codigo de grids, cells, y visitors) no sobrecargue al sistema y evitas crashes, esta ultima parte estoy seguro te va a interesar.[/li][/ul]

Eso como unos pocos consejos que te puedo dar ahora mismo, que tengo el tiempo encima xD, este temilla me está animando a postear una guía completa de consejos útiles y “trucos” o tips, para tunear un server a un buen nivel, claro con su parte estética bien montada y tal, basado en lo que es mi experiencia en dedicados y emuladores, que me ha servido y creo nos viene bien a todos desde que esto está hecho para aprender y compartir conocimiento.

Espero os haya ayudado ^^

Saludos

Eilo

Hola! como están?

sigo el foro hace tiempo, pero recién hace poco me registré.

Este tema es bastante interesante y era algo que hasta ahora, nunca le había prestado atención.

Tengo un i7 a 3,20 GHz, con 8 gb de ram. 4 procesadores y 8 threads. Windows server 2008 r2. (64B)

Como me recomiendan que ponga lo siguiente?

LoginDatabase.WorkerThreads = 1
WorldDatabase.WorkerThreads = 1
CharacterDatabase.WorkerThreads = 1
LoginDatabase.SynchThreads = 1
WorldDatabase.SynchThreads = 1
CharacterDatabase.SynchThreads = 2

Si entendi bien, deberia poner algo asi.

LoginDatabase.WorkerThreads = 1
WorldDatabase.WorkerThreads = 1
CharacterDatabase.WorkerThreads = 6

y lo otro… como lo pondrian?

Desde ya, muchas gracias a todos!!

lo mismo me pasa a mi , Lo compile en Ubuntu 17.04 y hasta ahora no tengo lag,

[ATTACH]2301._xfImport[/ATTACH]