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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Alvaro De León

Subscribe now to keep reading and get access to the full archive.

Continue reading