Être alerté en cas de OutOfMemoryException

le 7 septembre 2015, par Jean-Philippe Caruana

Un des plus grands dangers quand on exploite un service en production, c’est de ne pas être au courant qu’un problème a eu lieu. Un des problèmes graves que l’on peut rencontrer est l’arrêt d’une JVM qui n’a plus assez de mémoire disponible. D’innombrables causes peuvent en être l’origine, mais ce n’est pas le sujet de ce billet. Ici, nous allons voir comment en être alerté, afin de pouvoir réagir (relancer le service par exemple). Il faudra ensuite que l’équipe se penche sur le problème pour éviter que cela ne se reproduise.

Depuis la version 1.4.2 de java, il est possible de demander à la JVM d’appeler un script shell quand elle rencontre une OutOfMemoryException. Il suffit de passer l’option -XX:OnOutOfMemoryError=/mon/chemin/mon_script.sh au démarrage de la JVM. C’est une option qui fait partie de la catégorie debug ce qui fait qu’on ne pense pas à l’utiliser en production.

Pour notre part, nous avons choisi d’alerter sur 2 canaux distincts :

  • un envoi d’email à la liste des personnes intéressées (les développeurs) - nous allons probablement abandonner ce canal
  • une notification sur notre chan #prod sur slack avec un simple POST curl (bravo à slack pour l’ouverture de toutes ses API)

Les informations que nous envoyons sont le nom de l’application et le serveur sur lequel la JVM est morte.

Voici notre script, ou en tout cas son template jinja2 (à vous de remplacer les variables slack_webhooks_url, mail_admin_user, mail_monitoring_user et application à votre guise) :

#!/usr/bin/env bash

message="OutOfMemory detected for  on $HOSTNAME."

slack() {
    chan=$1
    message=$2
    curl -X POST --data-urlencode "payload={\"channel\": \"$chan\", \"username\": \"monitoring\", \"text\": \"$message\", \"icon_emoji\": \":sos:\"}" 
}

cat << EOF  | sendmail -it
From: 
To: 
Subject: [] JVM Out of memory
MIME-Version: 1.0
Content-Type: text/plain

$message

EOF

slack "#prod" "$message"

Depuis que nous avons mis cela en place sur tous nos services, nous avons pu rapidement mettre en place des solutions de contournement pour préserver la production, puis mener des actions de fond pour éviter que cela ne se reproduise.


Pour information, voici la liste des options de la JVM

Optimiser son client ssh

le 25 août 2015, par Jean-Philippe Caruana

Dans mon travail quotidien, je me connecte très souvent à une multitude de serveurs, que ce soit pour aller sur le serveur de logs, pour faire une mise en production ou faire de la maintenance système. Je me connecte également très souvent (sans le savoir) aux serveurs de github à chacune de mes actions git pull et git push.

Retour sur l'Agile Conférence 2015

le 8 juillet 2015, par Bruno Thomas

La semaine dernière, nous avons retrouvé les oies et les canards du chalet de la porte jaune pour la 10e édition de la conférence agile (anciennement XP Days), pour une thématique “par delà l’agilité”. Retour sur ce que nous avons retenu de l’ère post-agile, avec notre filtre forcément subjectif.

Le bagot du jour de l'an ou l'assert laxe

le 8 janvier 2015, par Bruno Thomas

Le 2 janvier est propice à la chasse au bagot : il est fréquent de rentrer encore un peu barbouillé des fêtes de fin d’années et d’être accueilli par une intégration continue rouge. Tests qui ne fonctionnent qu’en année bissextile, année codée en dur, numéro de mois qui va de 0 à 11, toutes les raisons sont bonnes.

Astuce - laisser nginx répondre robots.txt

le 7 janvier 2015, par Jean-Philippe Caruana

Sur le service sur lequel je travaille, j’ai observé de nombreuses erreurs 500 suite à des tentatives du Google Bot de trouver le fichier /robots.txt. Voici par exemple une log d’erreur de nginx :

Git - le message systématique qui agace

le 19 décembre 2014, par Jean-Philippe Caruana

A chaque git fetch ou git pull --rebase ou encore git merge branche, j’avais un message agaçant, même quand il n’y avait rien à faire (branche à jour). Par exemple :

Migrer un blog de Wordpress vers Jekyll

le 11 décembre 2014, par Jean-Philippe Caruana

Suite à la migration de notre blog vers un jekyll hébergé chez github, je vous propose quelques explications sur le sujet. Dans cet article, nous verrons :

Barre Verte a migré

le 5 décembre 2014, par Jean-Philippe Caruana

Nous venons de terminer la migration de Barre Verte : auparavant, nous nous hébergions nous-mêmes sous Wordpress chez Gandi, désormais, nous utilisons Jekyll hébergé (gratuitement) par Github.

MongoDb le cluster qui bagote

le 11 octobre 2014, par Philippe Blayo

Mug MongoDB Un soir, un développeur lâche en partant : « MongoDb c’est de la merde. Leur réplication ça marche pas. Je parie qu’on a aussi le bug en prod. Pour un peu j’en jetterais ma tasse mongo par la fenêtre. »