Aller au contenu
Weobia, Agence Internet et Digitale 360°

Hébergement Spring Boot

Sur la JVM, c’est la mémoire qui dimensionne

Une application Spring Boot ne se dimensionne pas comme un site PHP. Ce n’est ni le disque ni le nombre de visites qui décident, c’est la mémoire — et c’est ce que nous regardons en premier.

  • Serveur privé infogéré, mémoire dimensionnée sur l’usage réel
  • Un seul livrable à déployer, sans environnement à reconstituer
  • Compilation native GraalVM quand elle est possible
  • Sauvegarde, supervision et astreinte comprises

Le principe

Ce que demande une application JVM

Le déploiement est la partie facile

C’est l’un des grands avantages de Spring Boot : on obtient un seul livrable, capable de fonctionner sur de nombreux systèmes d’exploitation. Rien à installer sur le serveur au-delà de la machine virtuelle Java — pas d’environnement à reconstituer, pas de dépendances à faire correspondre.

Le même fichier tourne sur le poste du développeur, en recette et en production. Cela supprime toute une catégorie d’incidents de mise en ligne, ceux où l’environnement diffère sans qu’on sache dire en quoi.

La mémoire, et le piège du conteneur

Une application JVM réserve de la mémoire et la garde : elle ne la rend pas au système comme le ferait un script PHP. Le dimensionnement se fait donc sur la mémoire, pas sur le disque ni sur le nombre de visites.

Il faut surtout lui fixer un plafond explicite, aligné sur ce que la machine peut offrir. Sans cela, la JVM se croit seule et prend tout — c’est le mode d’échec le plus fréquent d’une application Java en conteneur : le processus est tué par le système, sans erreur applicative pour l’expliquer, et cela ressemble à une panne aléatoire.

La compilation native change la donne

Quand le projet s’y prête, la compilation native via GraalVM et Native Image produit un binaire optimisé. Deux conséquences directes sur l’hébergement : un démarrage quasi instantané, et une empreinte mémoire nettement réduite.

Une application qui aurait demandé une machine confortable tient alors sur bien moins, et supporte d’être arrêtée et relancée souvent — ce qui rend enfin raisonnable de la mettre en conteneur. Tout ne s’y prête pas, et nous vérifions avant de le promettre.

Java et Kotlin en conteneur

C’est le mode de déploiement le plus fréquent aujourd’hui, et celui où une application JVM se comporte le moins bien si l’on n’y prend pas garde. Quatre points, dans l’ordre où ils font mal :

La mémoire, encore. Une JVM regarde la machine pour décider ce qu’elle peut prendre. Dans un conteneur, elle doit regarder la limite du conteneur, pas celle de l’hôte — sinon elle se croit seule sur une grosse machine, réserve en conséquence, et le système la tue. L’application disparaît sans erreur applicative : rien dans les journaux n’explique l’arrêt, et cela ressemble à une panne aléatoire pendant des semaines.

Le temps de démarrage. Une JVM classique met des dizaines de secondes à être prête. Or l’orchestrateur, lui, veut savoir vite si le conteneur va bien : sans un délai de grâce correctement réglé, il tue le conteneur avant qu’il ait fini de démarrer, et le relance — indéfiniment.

La taille de l’image. Construire l’image en deux temps — compilation d’un côté, exécution de l’autre — évite d’embarquer l’outillage de construction en production. On divise le poids, donc le temps de déploiement et la surface d’attaque.

La compilation native. C’est ce qui réconcilie vraiment la JVM et le conteneur : GraalVM et Native Image produisent un binaire qui démarre quasi instantanément et consomme une fraction de la mémoire. L’application supporte alors d’être arrêtée et relancée souvent, ce qui est le mode de vie normal d’un conteneur. Tout ne s’y prête pas — nous vérifions avant de le promettre.

Serveur privé ou conteneur

Le serveur privé reste le plus simple : la machine est à vous, l’application tourne dessus, nous l’exploitons. C’est le choix par défaut pour une application unique et stable.

Le conteneur prend l’avantage dès qu’il y a plusieurs applications à faire cohabiter, plusieurs environnements à garder identiques, ou des déploiements fréquents. Nous exploitons Docker en mode Swarm : les conteneurs sont répartis sur plusieurs machines, replanifiés si un nœud tombe, et mis à jour par remplacement progressif des instances.

Ce qu’il y a autour

Un reverse proxy devant l’application, qui porte le certificat SSL et permet de basculer d’une version à l’autre sans coupure. Les journaux sortis du processus. Les métriques de la machine surveillées comme sur nos autres serveurs. Et la base de données — Hibernate parlant volontiers à plusieurs sources à la fois, il faut savoir lesquelles vivent chez nous et lesquelles restent chez vous.

Le socle

Ce que nous mettons en place

  • Mémoire dimensionnée

    Un plafond explicite, aligné sur la machine. C’est le réglage qui évite le mode d’échec le plus fréquent des applications Java : le processus tué sans erreur applicative.

  • Compilation native

    GraalVM et Native Image quand le projet s’y prête : démarrage quasi instantané, empreinte mémoire réduite, conteneurisation enfin raisonnable.

  • Conteneur bien réglé

    Plafond mémoire aligné sur la limite du conteneur, délai de grâce au démarrage, image construite en deux temps. Trois réglages qui évitent des semaines de fausses pannes.

  • Reverse proxy et SSL

    Nginx, HAProxy ou Traefik devant l’application : certificat automatique et bascule d’une version à l’autre sans coupure.

  • Bases et sources multiples

    MariaDB, PostgreSQL ou une base spécialisée. Hibernate parle volontiers à plusieurs sources : il faut décider lesquelles vivent chez nous.

  • Exploitation complète

    Mises à jour du système et de la JVM, sauvegarde répliquée hors site, correction automatique sur alerte et administrateur d’astreinte.

Questions fréquentes

Hébergement Spring Boot : vos questions

Une autre question ? Le support répond directement, sans intermédiaire, de 9h à 12h et de 14h à 17h.

02 40 18 01 68

Nous écrire →

Combien de mémoire faut-il ?

Cela dépend de l’application, et c’est précisément ce que nous mesurons plutôt que d’estimer : la consommation d’une JVM en charge réelle est la seule donnée qui vaille. Ce qui est certain, c’est qu’il faut un plafond explicite — sans lui, la JVM prend tout et le système finit par tuer le processus.

Peut-on la mettre en conteneur ?

Oui, à condition de fixer le plafond de mémoire en tenant compte de la limite du conteneur, faute de quoi le processus sera tué sans erreur applicative. La compilation native via GraalVM rend l’exercice bien plus confortable : démarrage quasi instantané et empreinte réduite.

Faut-il un serveur dédié ?

Une machine, oui — serveur privé ou conteneur : une application Spring Boot tourne en permanence et ne peut pas vivre sur une plateforme mutualisée. Nous l’exploitons pour vous : mises à jour, supervision, correction automatique sur alerte et astreinte.

Comment déployer sans coupure ?

En faisant tourner plusieurs instances derrière le proxy et en les remplaçant l’une après l’autre. Le temps de démarrage devient alors un vrai sujet : c’est l’un des arguments les plus concrets en faveur de la compilation native.

Combien de mémoire consomme votre application en charge ?

Si vous ne savez pas, c’est la première chose à mesurer — et nous pouvons le faire avec vous avant de dimensionner quoi que ce soit.

Demande de rappel

Nous vous rappelons

Laissez un numéro et un créneau. C'est un conseiller qui appelle, pas un centre d'appels — et si vous préférez composer vous-même, le 02 40 18 01 68 répond aux heures ouvrées.

Numéro français, fixe ou mobile. Il se met en forme tout seul.