Articles avec le tag ‘heap’

Les tests de charge à caractère technique (robustesse) sont ils importants ?

Introduction

Mettons-nous d’abord d’accord sur la définition de « tests de charge à caractère technique (ou test de robustesse) ».
Il s’agit de tester un système en mode dégradé : ralentissement de l'application, un des serveurs est non disponible, réseau saturé, panne mémoire, disque plein, réseau défaillant, etc. sous forte charge.
Maintenant que nous sommes d’accord, commençons.

Votre application a réussi tous les tests, qu’ils soient unitaires, d’intégration, fonctionnels ou de charge et nous voilà enfin prêts à la mettre en production.
Mais vous vous posez toujours des questions sur comment va réagir votre application en cas de fonctionnement dégradé.

Les délais font que l’application est mise en production sans la réalisation de ces tests.
Deux jours plus tard, après une campagne de publicité qui vous a apporté beaucoup de nouveaux utilisateurs, on vous réveille à deux heures du matin pour que vous veniez d’urgence au bureau, car l’application est dans un état instable.
Dommage, car des tests de robustesse auraient sûrement pu vous éviter ce désagrément.

Vous ne me croyez pas, vous avez raison.

Et si je vous dit que lors de mes missions j'ai rencontré :

  • des crashs de l'application à cause d'un consommateur JMS non démarré ;
  • des crashs de l'application à cause d'un load balancer mal configuré ;
  • des problèmes de répartition de charge dans un cluster d'Apache ActiveMQ après l'arrêt/relance d'un noeud.

Toujours pas. Et si je vous dit que ces problèmes sont arrivés dans des grosses structures sur des projets plus ou moins gros et avec des gens compétents ?

Bon vous ne me laisser plus le choix, nous allons voir un exemple qui vous prouvera (enfin je l'espère) l'importance de ces types de tests.

Mais avant cela comment allez vous reproduire ce bug qui est arrivé en environnement de production sur votre environnement de test ?

Avec un test de robustesse bien sûr 😉

Lire la suite de cette entrée »

OutOfMemoryError Java, que faire ?

Introduction

Un des atouts (ou inconvénient pour certains) de Java est qu'il n'y a pas à s'occuper de la libération de la mémoire grâce au Ramasse Miettes (Garbage Collector).

Malgré cela, nous ne sommes pas à l’abri de fuites mémoires (la fameuse exception OutOfMemoryError).

Pour pallier à ce problème, le moyen le plus simple est de faire un arrêt/relance de l'application. Solution que je déconseille d'utiliser, car en plus du problème de performance, s'ajoute le problème de disponibilité de l'application pour les clients.

Plus globalement, sans vouloir être puriste, nous n'avons pas d'autres choix que de corriger l’OutOfMemoryError, que cela soit un mauvais paramétrage de la JVM et/ou une fuite mémoire.

L'objectif de cet article est de comprendre comment apparaissent les OutOfMemoryError.
Lire la suite de cette entrée »

Fonctionnement de la JVM d’IBM : J9

1 Introduction

Il existe différentes JVM (JRockit, Hotspot, J9, Zing...) dans le monde de Java. Chacune a ses particularités et lors d'un audit de performance il est important de les connaitre.

Nous allons étudier le fonctionnement de la JVM J9 d'IBM livrée avec WebSphere 8.0 32 bits sur une plateforme x86.
Dans mon cas, c'est la version JRE 1.6.0 IBM Windows 32 build pwi3260_26fp1-20110419_01 (FP1) (java –fullversion).

Attention la JVM J9 n'est livrée avec WebSphere 8 que sur les environnements où elle existe. Dans les autres cas, c'est la JVM d'Oracle (Hotspot) qui est livrée.

Lire la suite de cette entrée »

Pourquoi faire attention à l’overhead

1 - Introduction

Lors d'une campagne de test de charge et de performance, ou d'une mise en place de supervision de la production , nous sommes amenés à mettre en place des outils de monitoring qui peuvent rapidement être intrusifs.

Le problème est que lorsqu'on mesure un système, on change le contexte de celui-ci et les mesures prises peuvent être faussées.

Pour éviter cela, il faut que les mesures perturbent le moins possible le système mesuré.

Dans cet article nous allons nous concentrer sur la mesure et la répartition de la consommation processeur d'un programme Java. Cela nous permettra de comparer plusieurs outils et de trouver des solutions afin de limiter le problème d'overhead.

Lire la suite de cette entrée »

Optimiser Tomcat : les bests practices – Part 2

 

Après avoir abordé les problématiques liées à la gestion de la Heap et des threads, voici une liste des paramètres principaux restants à aborder. (liste non-exhaustive évidemment !)

Le Tuning HTTP et TCP

Avant de s’attaquer à ces améliorations, il est important de comprendre et d'agir en fonction des connectors utilisés par votre serveur :

Blocking IO Connector

Lire la suite de cette entrée »

Mots-clés
RSS Feed