load average – Sam & Max http://sametmax.com Du code, du cul Wed, 30 Oct 2019 15:34:04 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.7 32490438 Récupérer le load average d’un serveur avec python + fonction sleep http://sametmax.com/recuperer-le-load-average-dun-serveur-avec-python-fonction-sleep/ Thu, 31 May 2012 11:03:39 +0000 http://sametmax.com/?p=819 Le load average désigne, sous les systèmes UNIX, une moyenne de la charge système, une mesure de la quantité de travail que fait le système durant la période considérée. Celle-ci est disponible via la commande top ou uptime, ou encore via le fichier système /proc/loadavg. (Voir wikipedia)

Un petit truc simple pour connaitre le load average de son serveur depuis son script python.

sous un shell python on tape:

>>> open("/proc/loadavg").readline().split(" ")[:3]   
['3.01', '2.74', '2.91']

On obtient une liste avec les load average des 1, 5 et 15 dernières minutes, c’est magique, pas besoin d’installer des scripts pourris qui mettent cent ans à configurer et qui marchent une fois sur deux (j’ai passé 1 journée pour essayer de conf Monit en vain, de la merde en boite faite par un autiste)

Mon serveur a les couilles dans un étaux comme on peut le voir, on peut imaginer une fonction qui va attendre que la charge baisse avant d’exécuter la prochaine tâche de torture.


import time

#wait if load average is too high
def load_average_wait(treshold=1):
    """
        If server is above the treshold value, wait for lower load before continue
    """

    while float(open("/proc/loadavg").readline().split(" ")[:3][0]) > treshold:
        time.sleep(10)


# my script part that eat a lot...
while True:
    
    # Encode video, is there anything else eating so much cpu in the universe ?
    encode_video()

    # wait if cpu start boiling...
    load_average_wait(1.5)

ça m’a sauvé 2 serveurs de la mort certaine, j’ai bien tenté un renice mais ça ne suffisait pas.

EDIT:
On peut également s’en servir pour s’envoyer des emails en cas de surcharge du serveur et ce sans installer d’usine à gaz genre nagio et autre…

]]>
819
Diminuer la charge cpu d’un process avec renice http://sametmax.com/diminuer-la-charge-cpu-dun-process-avec-renice/ http://sametmax.com/diminuer-la-charge-cpu-dun-process-avec-renice/#comments Tue, 29 May 2012 08:44:10 +0000 http://sametmax.com/?p=780 Il arrive que l’on ai a executer certains scripts sur un serveur de prod deja pas mal encombré, je prends comme exemple mon cas ou j’ai du reencoder des vidéos, le load average est monté à 6, les perfs en sont du coup devenues execrables.
Sous linux on a heureusement plein d’outils sympas, renice en fait partie.

La commande renice permet d’assigner une priorite a un process en cours qui va de -20 (tres elevee) à 20 (tres bas), 0 etant la valeur par défaut. La commande est “renice priorite id_process”, dans mon cas:

Note: On peut connaitre l’id du process avec un top ou htop

PID USER        PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND          
14378 max 	35  15  129m  12m 4632 R 99.4  0.2   0:03.22 ffmpeg       
22959 max       20  15  101m  79m  924 S  1.7  1.3   8:51.85 python encode.py                
22958 nginx     20   0  105m  83m  924 S  1.0  1.4   8:51.44 nginx     

Ici ffmpeg à un nice (NI) de 15 qu’il a herité de mon script Python encode.py a qui j’ai fais un renice de 15 avec la commande “renice 15 22959”. Les process heritent automatiquement du nice des parents qui les ont lancés.

]]>
http://sametmax.com/diminuer-la-charge-cpu-dun-process-avec-renice/feed/ 2 780