
Estoy usando la distribución Debian 8 Linux en 2 configuraciones de PC diferentes. La primera configuración que notará a continuación es la que estoy usando durante mucho tiempo. Esta configuración utiliza el 100 % de la CPU en los momentos de mayor actividad, por lo que decidí comprar una nueva PC con especificaciones mucho más altas. Estoy ejecutando una antigua aplicación de Linux de 32 bits que se lanzó hace más de 10 años, llamada samp03svr. Esta es una aplicación de un solo subproceso, por lo que busqué solo CPU de alta frecuencia. Los procesadores Xeon no me ayudarían. La aplicación necesita una frecuencia de CPU mayor que la cantidad de núcleos.
Aquí están las configuraciones de mi PC:
Una configuración anterior Placa base: ASUS P8H61-M Procesador: Intel i5-3570 @ 3,4 GHz RAM: 2x8 GB Kingston 1333 MHz
Una configuración más nueva Placa base: B250M-D3H-CF Procesador: CPU i7-7700K a 4,20 GHz RAM: 2 x 8 GB Kingston 2133 MHz
Lo que esperaría de la configuración más nueva es un uso de CPU mucho menor, pero, sorpresa, esto no está sucediendo. De hecho, el uso de la CPU es aproximadamente 5 veces mayor que en la configuración anterior. Las pruebas que hice se realizaron para la misma cantidad de carga de trabajo, con el mismo sistema operativo y los mismos controladores. Intenté incluso desactivar el subproceso múltiple pero no hay diferencia en el uso de la CPU.
¿Qué recomendarías hacer?
Respuesta1
Si su objetivo es satisfacer la demanda durante las horas pico que menciona, consideraría, si es posible, ejecutar el programa de servidor en ambas máquinas que tiene ahora y colocarlas detrás de un equilibrador de carga, como haproxy.
Por otro lado, si tu objetivo es reducir el consumo de CPU de tu programa servidor, tienes un par de opciones.
Puede reducir la prioridad de su proceso para que el kernel programe su tiempo de CPU de tal manera que no domine su CPU. Esto se puede hacer usando los comandos nice
o renice
. En Debian, los valores de prioridad varían de -20 a +19, y el valor predeterminado (iniciar un proceso sin usar nice) es 0. Cuanto mayor sea el valor, menor será la prioridad. Resulta fácil de recordar si lo piensa como "cuanto mejor es un proceso, más dispuesto está a ceder su tiempo de CPU a otros procesos".
Inicie su programa de esta manera usando diferentes valores de amabilidad:
nice -n +12 /path/to/your/program
Si su programa ya se está ejecutando, puede usarlo renice
con su pid:
#first find the pid
pgrep your_program_name
#or
ps aux | grep your_program_name
#now use the pid here
renice -n +12 pid_of_your_program
#or if you are comfortable combining these
renice -n +12 $(pgrep your_program_name)
Otra opción es utilizar una herramienta llamada cpulimit
. Te permite ejecutar un programa y definir el porcentaje máximo de CPU que deseas permitirle.
#install the package
apt-get install cpulimit
#run your program, for example limiting to 25%
cpulimit -l 25 /path/to/your/program