Sam & Max » ram http://sametmax.com Du code, du cul Sat, 07 Nov 2015 10:56:13 +0000 en-US hourly 1 http://wordpress.org/?v=4.1 Afficher la liste des process qui utilisent la SWAP http://sametmax.com/afficher-la-liste-des-process-qui-utilise-la-swap/ http://sametmax.com/afficher-la-liste-des-process-qui-utilise-la-swap/#comments Thu, 10 May 2012 20:52:37 +0000 http://sametmax.com/?p=588 Voici un petit script bien pratique pour trouver quel process lancé par quelle ligne de commande utilise la SWAP de votre serveur.

(Pour savoir si votre serveur utilise la SWAP vous pouvez utiliser un outil comme htop)

Ouvrez un fichier getswap.sh avec vi ou autre et ajouter ces lignes:

#!/bin/bash
# Get current swap usage for all running processes
# Usage: ./getswap.sh | sort -n -k 5
# Erik Ljungstrom 27/05/2011
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
PROGPATH=`cat /proc/$PID/cmdline`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME - $PROGPATH)"
let OVERALL=$OVERALL+$SUM
SUM=0
 
done
echo "Overall swap used: $OVERALL"

Pour afficher les process lancez le avec la ligne de commande suivante:
les options -n et -k de sort vont respectivement trier par ordre numérique la 5eme colone (quantité de swap utilisée)

./getswap.sh | sort -n -k 5

Ce qui donne:

...
PID=854 - Swap used: 1356 - (php-cgi - /usr/local/bin/php-cgi)
PID=2107 - Swap used: 1948 - (hald - hald)
PID=11720 - Swap used: 2604 - (scrapy - /home/scrpamanga/.virtualenvs/scrpamanga/bin/python26/home/scrpamanga/.virtualenvs/scrpamanga/bin/scrapy crawl wikipedia)
PID=30152 - Swap used: 4004 - (supervisord - /usr/bin/python/usr/bin/supervisord-csupervisor.ini)
PID=2791 - Swap used: 7188 - (yum-updatesd - /usr/bin/python-tt/usr/sbin/yum-updatesd)

Dans notre exemple on voit qu’un process (11720) Fait swapper le système, après une plus grand investiguation un problème a été trouvé dans le script, consommant beaucoup et saturant la mémoire système obligeant ce dernier à swapper.

]]>
http://sametmax.com/afficher-la-liste-des-process-qui-utilise-la-swap/feed/ 0
Quand Mechanize bouffe toute votre RAM et que vous ne savez pas pourquoi…. 1 http://sametmax.com/quand-mechanize-bouffe-toute-votre-ram-et-que-vous-ne-savez-pas-pourquoi/ http://sametmax.com/quand-mechanize-bouffe-toute-votre-ram-et-que-vous-ne-savez-pas-pourquoi/#comments Wed, 21 Mar 2012 17:36:52 +0000 http://sametmax.com/?p=282 En revenant de Bangla Road l’autre soir, je me connecte sur l’admin d’un de nos serveurs et je m’aperçois qu’un script de grabbing bouffait à lui tout seul plus de 30% de la mémoire. Après quelques recherches, Sam me fait part d’un article sur Mechanize et sa tendance à avoir un history plutôt vorace en RAM.

Le coupable était Mechanize avec le chandelier dans le salon :

En effet, Mechanize par défaut sauve tout l’historique de votre navigation, donc imaginez le carnage quand vous avez un script qui est censé scanner des milliers de pages internet…

Pour lui couper le sifflet on peut utiliser cette méthode :

 
import mechanize
from mechanize import History
 
class MaxHistory(History):
    """
        History implementation with a size limit.
    """
    def __init__(self, max_history=None):
        self._history = []  # LIFO
        self.max_history = max_history
 
    def add(self, request, response):
        self._history.append((request, response))
 
        if (self.max_history is not None and self._history
            and self.max_history <= len(self._history)):
            self._history.pop(0)
 
br = mechanize.Browser(history=MaxHistory(max_history=10))
Browser.open("http://sametmax.com/")

Et voilà !
Plus de problème de mémoire. Merci bibi.

]]>
http://sametmax.com/quand-mechanize-bouffe-toute-votre-ram-et-que-vous-ne-savez-pas-pourquoi/feed/ 1