Aller au contenu principal
Version : Suivant

Simuler les pannes d'applications JVM

Traduction Bêta Non Officielle

Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →

Chaosd simule les pannes des applications JVM via Byteman. Les types de pannes pris en charge sont les suivants :

  • Lancer des exceptions personnalisées

  • Déclencher le garbage collection

  • Augmenter la latence des méthodes

  • Modifier les valeurs de retour d'une méthode

  • Déclencher des pannes en configurant des fichiers Byteman

  • Augmenter la pression sur la JVM

Ce document explique comment utiliser Chaosd pour créer ces types de pannes dans des expériences JVM.

Créer des expériences en mode ligne de commande

Cette section présente la création d'expériences de pannes d'applications JVM via le mode ligne de commande.

Avant de créer une expérience, exécutez la commande suivante pour voir les types de pannes JVM pris en charge par Chaosd :

chaosd attack jvm -h

Le résultat est le suivant :

JVM attack related commands

Usage:
chaosd attack jvm [command]

Available Commands:
exception throw specified exception for specified method
gc trigger GC for JVM
latency inject latency to specified method
return return specified value for specified method
rule-file inject fault with configured byteman rule file
stress inject stress to JVM

Flags:
-h, --help help for jvm
--pid int the pid of Java process which needs to attach
--port int the port of agent server (default 9288)

Global Flags:
--log-level string the log level of chaosd. The value can be 'debug', 'info', 'warn' and 'error'
--uid string the experiment ID

Use "chaosd attack jvm [command] --help" for more information about a command.

Lancer des exceptions personnalisées en mode ligne de commande

Commandes pour lancer des exceptions personnalisées

Pour consulter l'utilisation et les options de configuration de la commande de lancement d'exceptions personnalisées, exécutez :

chaosd attack jvm exception --help

Le résultat est le suivant :

throw specified exception for specified method

Usage:
chaosd attack jvm exception [options] [flags]

Flags:
-c, --class string Java class name
--exception string the exception which needs to throw for action 'exception'
-h, --help help for exception
-m, --method string the method name in Java class

Global Flags:
--log-level string the log level of chaosd. The value can be 'debug', 'info', 'warn' and 'error'
--pid int the pid of Java process which needs to attach
--port int the port of agent server (default 9288)
--uid string the experiment ID

Description de configuration pour les exceptions personnalisées

Configuration itemAbbreviationDescriptionValue
classcThe name of the Java classstring type, required
exceptionNoneThe thrown custom exceptionstring type, required
methodmThe name of the methodstring type, required to be configured
pidNoneThe Java process ID where the fault is to be injectedint type, required
portNoneThe port number attached to the Java process agent. The fault is injected into the Java process through this port number.int type. The default value is 9288.
uidNoneThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple de lancement d'exceptions personnalisées

chaosd attack jvm exception -c Main -m sayhello --exception 'java.io.IOException("BOOM")' --pid 30045

Le résultat est le suivant :

[2021/08/05 02:39:39.106 +00:00] [INFO] [jvm.go:208] ["byteman rule"] [rule="\nRULE Main-sayhello-exception-q6nd0\nCLASS Main\nMETHOD sayhello\nAT ENTRY\nIF true\nDO \n\tthrow new java.io.IOException(\"BOOM\");\nENDRULE\n"] [file=/tmp/rule.btm296930759]
Attack jvm successfully, uid: 26a45ae2-d395-46f5-a126-2b2c6c85ae9d

Déclencher le garbage collection en mode ligne de commande

Commandes pour déclencher le garbage collection

Pour consulter l'utilisation et les options de configuration de la commande de déclenchement du garbage collection, exécutez :

chaosd attack jvm gc --help
trigger GC for JVM

Usage:
chaosd attack jvm gc [flags]

Flags:
-h, --help help for gc

Global Flags:
--log-level string the log level of chaosd. The value can be 'debug', 'info', 'warn' and 'error'
--pid int the pid of Java process which needs to attach
--port int the port of agent server (default 9288)
--uid string the experiment ID

Description de configuration pour le garbage collection

Configuration itemAbbreviationDescriptionValue
pidNoneThe Java process ID where the fault is to be injectedint type, required
portNoneThe port number attached to the Java process agent. The fault is injected into the Java process through this port number.int type. The default value is 9288.
uidNoneThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple de déclenchement du garbage collection

chaosd attack jvm gc --pid 89345

Le résultat est le suivant :

[2021/08/05 02:49:47.850 +00:00] [INFO] [jvm.go:208] ["byteman rule"] [rule="\nRULE --gc-u0mlf\nGC\nENDRULE\n"] [file=/tmp/rule.btm012481052]
Attack jvm successfully, uid: f360e70a-5359-49b6-8526-d7e0a3c6f696

Le déclenchement du garbage collection est une opération ponctuelle qui ne nécessite pas de récupération.

Augmenter la latence des méthodes en mode ligne de commande

Commandes pour augmenter la latence des méthodes

Pour consulter l'utilisation et les options de configuration de la commande d'augmentation de latence, exécutez :

chaosd attack jvm latency --help

Le résultat est le suivant :

inject latency to specified method

Usage:
chaosd attack jvm latency [options] [flags]

Flags:
-c, --class string Java class name
-h, --help help for latency
--latency int the latency duration, unit ms
-m, --method string the method name in Java class

Global Flags:
--log-level string the log level of chaosd. The value can be 'debug', 'info', 'warn' and 'error'
--pid int the pid of Java process which needs to attach
--port int the port of agent server (default 9288)
--uid string the experiment ID

Description de configuration pour l'augmentation de latence

Configuration itemAbbreviationDescriptionValue
classcThe name of the Java classstring type, required
latencyNoneThe duration of increasing method latencyint type, required. The unit is millisecond.
methodmThe name of the methodstring type, required
pidNoneThe Java process ID where the fault is to be injectedint type, required
portNoneThe port number attached to the Java process agent. The fault is injected into the Java process through this port number.int type. The default value is 9288.
uidNoneThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple d'augmentation de latence des méthodes

chaosd attack jvm latency --class Main --method sayhello --latency 5000 --pid 100840

Le résultat est le suivant :

[2021/08/05 03:08:50.716 +00:00] [INFO] [jvm.go:208] ["byteman rule"] [rule="\nRULE Main-sayhello-latency-hlib2\nCLASS Main\nMETHOD sayhello\nAT ENTRY\nIF true\nDO \n\tThread.sleep(5000);\nENDRULE\n"] [file=/tmp/rule.btm359997255]
[2021/08/05 03:08:51.155 +00:00] [INFO] [jvm.go:94] ["submit rules"] [output="install rule Main-sayhello-latency-hlib2\n\n"]
Attack jvm successfully, uid: bbe00c57-ac9d-4113-bf0c-2a6f184be261

Modifier les valeurs de retour d'une méthode en mode ligne de commande

Commandes pour modifier les valeurs de retour

Pour consulter l'utilisation et les options de configuration de la commande de modification des valeurs de retour, exécutez :

chaosd attack jvm return --help
return specified value for specified method

Usage:
chaosd attack jvm return [options] [flags]

Flags:
-c, --class string Java class name
-h, --help help for return
-m, --method string the method name in Java class
--value string the return value for action 'return'. Only supports number and string types.

Global Flags:
--log-level string the log level of chaosd. The value can be 'debug', 'info', 'warn' and 'error'
--pid int the pid of Java process which needs to attach
--port int the port of agent server (default 9288)
--uid string the experiment ID

Description de configuration pour la modification des valeurs de retour

Configuration itemAbbreviationDescriptionValue
classcThe name of the Java classstring type, required to be configured
methodmThe name of the methodstring type, required to be configured
valueNoneSpecifies the return value of the methodstring type, required to be configured. Currently, the item can be numeric and string types. If the item (return value) is string, double quotes are required, like "chaos".
pidNoneThe Java process ID where the fault is needed to be injectedint type, required to be configured
portNoneThe port number attached to the Java process agent. The faults is injected into the Java process through this port number.int type. The default value is 9288.
uidNoneThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple de modification des valeurs de retour d'une méthode

chaosd attack jvm return --class Main --method getnum --value 999 --pid 112694

Le résultat est le suivant :

[2021/08/05 03:35:10.603 +00:00] [INFO] [jvm.go:208] ["byteman rule"] [rule="\nRULE Main-getnum-return-i6gb7\nCLASS Main\nMETHOD getnum\nAT ENTRY\nIF true\nDO \n\treturn 999;\nENDRULE\n"] [file=/tmp/rule.btm051982059]
[2021/08/05 03:35:10.820 +00:00] [INFO] [jvm.go:94] ["submit rules"] [output="install rule Main-getnum-return-i6gb7\n\n"]
Attack jvm successfully, uid: e2f204f6-4bed-4d92-aade-2b4a47b02e5d

Déclencher des pannes via des fichiers de configuration Byteman en mode ligne de commande

Configurez les règles de panne dans un fichier de configuration Byteman, puis injectez les pannes en spécifiant son chemin avec Chaosd. Pour la syntaxe des règles Byteman, consultez byteman-rule-language.

Commandes pour déclencher des pannes via fichiers Byteman

Pour consulter l'utilisation et les options de configuration de cette commande, exécutez :

chaosd attack jvm rule-file --help

Le résultat est le suivant :

inject fault with configured byteman rule file

Usage:
chaosd attack jvm rule-file [options] [flags]

Flags:
-h, --help help for rule-file
-p, --path string the path of configured byteman rule file

Global Flags:
--log-level string the log level of chaosd, the value can be 'debug', 'info', 'warn' and 'error'
--pid int the pid of Java process which needs to attach
--port int the port of agent server (default 9288)
--uid string the experiment ID

Description de configuration pour les pannes via fichiers Byteman

Configuration itemAbbreviationDescriptionValue
pathNoneSpecifies the path of the Byteman configuration filestring type, required
pidNoneThe Java process ID where the fault is to be injectedint type, required
portNoneThe port number attached to the Java process agent. The fault is injected into the Java process through this port number.int type. The default value is 9288.
uidNoneThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple de déclenchement de pannes via fichiers Byteman

D'abord, en fonction du programme Java spécifique et en vous référant au langage de règles Byteman, rédigez un fichier de configuration de règles. Par exemple :

RULE modify return value
CLASS Main
METHOD getnum
AT ENTRY
IF true
DO
return 9999
ENDRULE

Ensuite, enregistrez le fichier de configuration sous le nom return.btm. Après cela, exécutez la commande suivante pour injecter les perturbations.

chaosd attack jvm rule-file -p ./return.btm --pid 112694

Le résultat est le suivant :

[2021/08/05 03:45:40.757 +00:00] [INFO] [jvm.go:152] ["rule file data:RULE modify return value\nCLASS Main\nMETHOD getnum\nAT ENTRY\nIF true\nDO\n    return 9999\nENDRULE\n"]
[2021/08/05 03:45:41.011 +00:00] [INFO] [jvm.go:94] ["submit rules"] [output="install rule modify return value\n\n"]
Attack jvm successfully, uid: 5ca2e06d-a7c6-421d-bb67-0c9908bac17a

Augmenter la charge du JVM en mode ligne de commande

Commandes pour augmenter la charge du JVM

Pour voir l'utilisation et les éléments de configuration de la commande augmentant la charge du JVM, exécutez :

chaosd attack jvm stress --help

Le résultat est le suivant :

inject stress to JVM

Usage:
chaosd attack jvm stress [options] [flags]

Flags:
--cpu-count int the CPU core number
-h, --help help for stress
--mem-type int the memory type to be allocated. The value can be 'stack' or 'heap'.

Global Flags:
--log-level string the log level of chaosd. The value can be 'debug', 'info', 'warn' and 'error'
--pid int the pid of Java process which needs to attach
--port int the port of agent server (default 9288)
--uid string the experiment ID

Description de configuration pour augmenter la charge du JVM

Configuration itemAbbreviationDescriptionValue
cpu-countNoneThe number of CPU cores used for increasing JVM stressint type. You must configure one item between cpu-count and mem-type.
mem-typeNoneThe type of OOMstring type. Currently, both 'stack' and 'heap' OOM types are supported. You must configure one item between cpu-count and mem-type.
pidNoneThe Java process ID where the fault is to be injectedint type, required
portNoneThe port number attached to the Java process agent. The fault is injected into the Java process through this port number.int type. The default value is 9288.
uidNoneThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple d'augmentation de la charge du JVM

chaosd attack jvm stress --cpu-count 2 --pid 123546

Le résultat est le suivant :

[2021/08/05 03:59:51.256 +00:00] [INFO] [jvm.go:208] ["byteman rule"] [rule="\nRULE --stress-jfeiu\nSTRESS CPU\nCPUCOUNT 2\nENDRULE\n"] [file=/tmp/rule.btm773062009]
[2021/08/05 03:59:51.613 +00:00] [INFO] [jvm.go:94] ["submit rules"] [output="install rule --stress-jfeiu\n\n"]
Attack jvm successfully, uid: b9b997b5-0a0d-4f1f-9081-d52a32318b84

Créer des expériences en mode service

Vous pouvez suivre les instructions ci-dessous pour créer des expériences en mode service.

  1. Exécutez Chaosd en mode service :

    chaosd server --port 31767
  2. Envoyez une requête HTTP POST au chemin /api/attack/{uid} du service Chaosd.

    curl -X POST 172.16.112.130:31767/api/attack/jvm -H "Content-Type:application/json" -d '{fault-configuration}'

    Pour la partie fault-configuration dans la commande ci-dessus, configurez-la selon le type de perturbation. Pour les paramètres correspondants, reportez-vous aux paramètres et exemples de chaque type de perturbation dans les sections suivantes.

note

Lors de l'exécution d'une expérience, pensez à enregistrer les informations UID de l'expérience. Pour arrêter l'expérience correspondant à l'UID, envoyez une requête HTTP DELETE au chemin /api/attack/{uid} du service Chaosd.

Lancer des exceptions personnalisées en mode service

Paramètres pour lancer des exceptions personnalisées

ParameterDescriptionValue
actionThe action of the experimentSet to "exception"
classThe name of the Java classstring type, required
exceptionThe thrown custom exceptionstring type, required
methodThe name of the methodstring type, required
pidThe Java process ID where the fault is to be injectedint type, required
portThe port number attached to the Java process agent. The faults is injected into the Java process through this port number.int type. The default value is 9288.
uidThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple de lancement d'exceptions personnalisées en mode service

curl -X POST 172.16.112.130:31767/api/attack/jvm -H "Content-Type:application/json" -d '{"action":"exception","class":"Main","method":"sayhello","exception":"java.io.IOException(\"BOOM\")","pid":1828622}'

Le résultat est le suivant :

{"status":200,"message":"attack successfully","uid":"c3c519bf-819a-4a7b-97fb-e3d0814481fa"}

Déclencher le garbage collection en mode service

Paramètres pour déclencher le garbage collection

ParameterDescriptionValue
actionThe action of the experimentSet to "gc"
pidThe Java process ID where the fault is to be injectedint type, required
portThe port number attached to the Java process agent. The fault is injected into the Java process through this port number.int type. The default value is 9288.
uidThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple de déclenchement du garbage collection en mode service

curl -X POST 172.16.112.130:31767/api/attack/jvm -H "Content-Type:application/json" -d '{"action":"gc","pid":1828622}'

Le résultat est le suivant :

{"status":200,"message":"attack successfully","uid":"c3c519bf-819a-4a7b-97fb-e3d0814481fa"}

Le déclenchement du garbage collection est une opération ponctuelle. L'expérience ne nécessite pas de récupération.

Augmenter la latence des méthodes en mode service

Paramètres pour augmenter la latence des méthodes

ParameterDescriptionValue
actionThe action of the experimentSet to "latency"
classThe name of the Java classstring type, required
latencyThe duration of increasing method latencyint type, required. The unit is millisecond.
methodThe name of the methodstring type, required
pidThe Java process ID where the fault is to be injectedint type, required
portThe Java process ID where the fault is needed to be injectedint type, required
uidThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple d'augmentation de latence des méthodes en mode service

curl -X POST 172.16.112.130:31767/api/attack/jvm -H "Content-Type:application/json" -d '{"action":"latency","class":"Main","method":"sayhello","latency":5000,"pid":1828622}'

Le résultat est le suivant :

{"status":200,"message":"attack successfully","uid":"a551206c-960d-4ac5-9056-518e512d4d0d"}

Modifier les valeurs de retour d'une méthode en mode service

Paramètres pour modifier les valeurs de retour d'une méthode

ParameterDescriptionValue
actionThe action of the experimentSet to "return"
classThe name of the Java classstring type, required
methodThe name of the methodstring type, required
valueSpecifies the return value of the methodstring type, required. Currently, the item can be numeric and string types. If the item (return value) is string, double quotes are required, like "chaos".
pidThe Java process ID where the fault is to be injectedint type, required
portThe port number attached to the Java process agent. The fault is injected into the Java process through this port number.int type. The default value is 9288.
uidThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple de modification des valeurs de retour d'une méthode en mode service

curl -X POST 172.16.112.130:31767/api/attack/jvm -H "Content-Type:application/json" -d '{"action":"return","class":"Main","method":"getnum","value":"999","pid":1828622}'

Le résultat est le suivant :

{"status":200,"message":"attack successfully","uid":"a551206c-960d-4ac5-9056-518e512d4d0d"}

Déclencher des perturbations via des fichiers de configuration Byteman en mode service

Vous pouvez définir les règles de perturbation selon la configuration des règles Byteman. Pour plus d'informations sur la configuration des règles Byteman, reportez-vous au langage de règles Byteman.

Paramètres pour déclencher des perturbations via des fichiers de configuration Byteman

ParameterDescriptionValue
actionThe action of the experimentSet to "rule-data"
rule-dataSpecifies the Byteman configuration datastring type, required
pidThe Java process ID where the fault is to be injectedint type, required
portThe port number attached to the Java process agent. The fault is injected into the Java process through this port number.int type. The default value is 9288.
uidThe experiment IDstring type. This item is not required to be configured, because Chaosd randomly creates one.

Exemple de déclenchement de perturbations via des fichiers de configuration Byteman en mode service

D'abord, en fonction du programme Java spécifique et en vous référant au langage de règles Byteman, rédigez un fichier de configuration de règles. Par exemple :

RULE modify return value
CLASS Main
METHOD getnum
AT ENTRY
IF true
DO
return 9999
ENDRULE

Ensuite, échappez les sauts de ligne dans le fichier de configuration avec le caractère de nouvelle ligne "\n", et utilisez le texte échappé comme valeur de "rule-data". Exécutez la commande suivante :

curl -X POST 127.0.0.1:31767/api/attack/jvm -H "Content-Type:application/json" -d '{"action":"rule-data","pid":30045,"rule-data":"\nRULE modify return value\nCLASS Main\nMETHOD getnum\nAT ENTRY\nIF true\nDO return 9999\nENDRULE\n"}'

Le résultat est le suivant :

{"status":200,"message":"attack successfully","uid":"a551206c-960d-4ac5-9056-518e512d4d0d"}

Augmenter la charge JVM en utilisant le mode service

Paramètres pour augmenter la charge JVM

| Paramètre | Description | Valeur | | :-- | :-- | :-- | --- | | action | L'action de l'expérience | Définir à "stress" | | cpu-count | Le nombre de cœurs CPU utilisés pour augmenter la charge CPU | Type int. Vous devez configurer un élément entre cpu-count et mem-type. | | mem-type | Le type d'OOM (Out Of Memory) | Type string. Actuellement, les types OOM 'stack' et 'heap' sont pris en charge. Vous devez configurer un élément entre cpu-count et mem-type. | | pid | None | L'ID du processus Java où la panne doit être injectée | Type int, requis | | port | None | Le numéro de port attaché à l'agent du processus Java. La panne est injectée dans le processus Java via ce numéro de port. | Type int. Valeur par défaut : 9288. | | uid | None | L'ID de l'expérience | Type string. Cet élément n'est pas nécessaire à configurer, car Chaosd en crée un aléatoirement. |

Exemple pour augmenter la charge JVM en utilisant le mode service

curl -X POST 172.16.112.130:31767/api/attack/jvm -H "Content-Type:application/json" -d '{"action":"stress","cpu-count":1,"pid":1828622}'

Le résultat est le suivant :

{"status":200,"message":"attack successfully","uid":"a551206c-960d-4ac5-9056-518e512d4d0d"}