La question
Comment l’allocation mémoire influence-t-elle un calcul Java ? Et comment vérifier que la concurrence, les métriques et les traces se comportent comme attendu ?
La charge CPU utilisée est artificielle.
Architecture
- Invocations Lambda
- Trois fonctions Java 25
- Logs et métriques CloudWatch
- Traces X-Ray
Les invocations déclenchent trois fonctions qui partagent le même programme. Chaque fonction produit ses logs et métriques dans CloudWatch et émet des traces vers X-Ray. Un rôle IAM commun a été audité pour les permissions d’écriture limitées aux logs et aux traces.
Un rôle d’exécution commun autorise les écritures de logs et de traces.
Le protocole
- Runtime Java 25, même programme et même résultat de calcul : 78 498.
- Trois allocations mémoire : 256, 1 024 et 2 048 MB.
- Cinq exécutions par taille pour chacune des deux campagnes.
- Un mode de calcul CPU et un mode d’attente de 3 000 ms pour le test de concurrence.
Deux campagnes de mesures
| Mémoire | Durée du handler | Durée facturée | GB·ms |
|---|---|---|---|
| 256 MB | 1 008,8 ms | 1 030,2 ms | 257,55 |
| 1 024 MB | 245,2 ms | 248,2 ms | 248,2 |
| 2 048 MB | 123 ms | 126,4 ms | 252,8 |
| Mémoire | Durée du handler | Durée facturée | GB·ms |
|---|---|---|---|
| 256 MB | 969 ms | 986 ms | 246,5 |
| 1 024 MB | 139 ms | 141,6 ms | 141,6 |
| 2 048 MB | 142,4 ms | 145,2 ms | 290,4 |
Les GB·ms expriment le produit mémoire-durée, pas un montant en dollars. La première campagne favorise 2 048 MB en latence ; la dernière favorise 1 024 MB en latence et en GB·ms. Les deux résultats montrent la variabilité observée.
Concurrence et rejet contrôlé
Six appels d’attente ont réussi en 5 201 ms de temps total, contre 18 000 ms séquentielles théoriques, soit un rapport d’environ 3,46.
Une réservation positive à deux exécutions a échoué à cause d’une contrainte de quota et a été retirée du template. Une réservation temporaire à zéro a ensuite servi à provoquer le rejet attendu puis a été supprimée.
Vérifier l’observation elle-même
- CloudWatch, sur une fenêtre de trente minutes : 12 invocations, zéro erreur, un throttle, concurrence maximale de six.
- X-Ray : quatre résumés retrouvés ; une trace récupérée avec deux segments.
- IAM : rôle commun aux trois fonctions, deux policies inline pour logs et traces, aucune policy gérée attachée.
La lecture des traces côté service a retrouvé l’identifiant absent des logs parsés.
Ce que je retiens
Comparer un même workload sur plusieurs campagnes et vérifier les données dans les services d’observabilité donne plus d’informations qu’un chiffre isolé.