Existen veces que necesitamos crear una sobrecarga para comprobar y realizar pruebas, uno de los métodos mas comunes y simples es Apache Benchmark para testear el comportamiento de una aplicación web y de un servidor con carga de trabajo, sin embargo a veces la sobrecarga generada no es ni cerca lo que puede generarse en el mundo real, una manera practica generar una sobre carga es hacerlo con el siguiente comando:
dd if=/dev/zero of=/dev/null
Si bien funciona es bastante lento y si necesitamos llegar a una carga alta puede tomar bastante tiempo por eso se me ocurrió lanzar este comando diez, cien o docientas veces en paralelo, para eso se me ocurrió aprovechar Hilos, Canales y multitarea en Go .
Instalación de GO
Para ejecutarlo lo primero es tener instalado go, para lo que debemos hacer es Instalando GO en Fedora/Debian/Ubuntu
Código
Luego simplemente creamos el directorio
mkdir -p ~/go/src/overload
Luego creamos el archivo overload.go:
nano ~/go/src/overload/overload.go
Donde guardamos el siguiente código:
package main import "fmt" import "os/exec" const num_threads = 100 func main() { channels := make(chan string,num_threads) for i := 0; i < num_threads; i++ { go thread(i,channels) } count := 0 for elem := range channels { if count == num_threads - 1 { close(channels) } count++ fmt.Println(elem) } } func thread(index int,channels chan string) { cmd := exec.Command("dd","if=/dev/zero","of=/dev/null") stdout, _ := cmd.Output() str := string(stdout) channels <- str }
Luego para ejecutarlo simplemente hacemos:
cd ~/go/src/overload/ go run overload.go
Conclusion
Es la forma mas rápida y sencilla que encontré de sobrecargar un servidor, si bien en este caso solo me hacia falta elevar el consumo de CPU sin importar el medio perfectamente se puede ajustar el script para ejecutar cualquier cosa y poder probar lo que se necesite.
Hay que tener cuidado debido a que genera una carga muy alta en un breve periodo de tiempo, si estamos en un servidor dedicado no pasa nada sin embargo si estamos en un Cloud podemos ser bloqueados, suspendidos e incluso eliminados por el proveedor, hay que recordar que un Cloud VPS es una maquina virtual dentro de un servidor con otras maquinas virtuales y lo que hagamos mermara el rendimiento de todos por lo que hay que usar el script lo mínimo que necesitemos y con cuidado.
Administrador de Sistemas, Programador, Docente y ahora resulta que también Blogger (peor es ser tictoker). Más de 20 años de experiencia en computación atendiendo nabos y resolviendo problemas, los cuales si no fuera por estos nabos, no habrían ocurrido en primer lugar. Escribo más que nada sobre tecnología y herramientas en general, además de algunos artículos con opiniones tan subjetivas como irrelevantes, así que si no te gustan, mejor madura y superalo.