Simuler les pannes d'applications JVM
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 item | Abbreviation | Description | Value |
|---|---|---|---|
class | c | The name of the Java class | string type, required |
exception | None | The thrown custom exception | string type, required |
method | m | The name of the method | string type, required to be configured |
pid | None | The Java process ID where the fault is to be injected | int type, required |
port | None | The 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. |
uid | None | The experiment ID | string 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 item | Abbreviation | Description | Value |
|---|---|---|---|
pid | None | The Java process ID where the fault is to be injected | int type, required |
port | None | The 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. |
uid | None | The experiment ID | string 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 item | Abbreviation | Description | Value |
|---|---|---|---|
class | c | The name of the Java class | string type, required |
latency | None | The duration of increasing method latency | int type, required. The unit is millisecond. |
method | m | The name of the method | string type, required |
pid | None | The Java process ID where the fault is to be injected | int type, required |
port | None | The 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. |
uid | None | The experiment ID | string 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 item | Abbreviation | Description | Value |
|---|---|---|---|
| class | c | The name of the Java class | string type, required to be configured |
| method | m | The name of the method | string type, required to be configured |
| value | None | Specifies the return value of the method | string 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". |
| pid | None | The Java process ID where the fault is needed to be injected | int type, required to be configured |
| port | None | The 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. |
uid | None | The experiment ID | string 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 item | Abbreviation | Description | Value |
|---|---|---|---|
path | None | Specifies the path of the Byteman configuration file | string type, required |
pid | None | The Java process ID where the fault is to be injected | int type, required |
port | None | The 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. |
uid | None | The experiment ID | string 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 item | Abbreviation | Description | Value |
|---|---|---|---|
cpu-count | None | The number of CPU cores used for increasing JVM stress | int type. You must configure one item between cpu-count and mem-type. |
mem-type | None | The type of OOM | string type. Currently, both 'stack' and 'heap' OOM types are supported. You must configure one item between cpu-count and mem-type. |
pid | None | The Java process ID where the fault is to be injected | int type, required |
port | None | The 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. |
uid | None | The experiment ID | string 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.
-
Exécutez Chaosd en mode service :
chaosd server --port 31767 -
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-configurationdans 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.
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
| Parameter | Description | Value |
|---|---|---|
action | The action of the experiment | Set to "exception" |
class | The name of the Java class | string type, required |
exception | The thrown custom exception | string type, required |
method | The name of the method | string type, required |
pid | The Java process ID where the fault is to be injected | int type, required |
port | The 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. |
uid | The experiment ID | string 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
| Parameter | Description | Value |
|---|---|---|
action | The action of the experiment | Set to "gc" |
pid | The Java process ID where the fault is to be injected | int type, required |
port | The 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. |
uid | The experiment ID | string 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
| Parameter | Description | Value |
|---|---|---|
action | The action of the experiment | Set to "latency" |
class | The name of the Java class | string type, required |
latency | The duration of increasing method latency | int type, required. The unit is millisecond. |
method | The name of the method | string type, required |
pid | The Java process ID where the fault is to be injected | int type, required |
port | The Java process ID where the fault is needed to be injected | int type, required |
uid | The experiment ID | string 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
| Parameter | Description | Value |
|---|---|---|
action | The action of the experiment | Set to "return" |
class | The name of the Java class | string type, required |
method | The name of the method | string type, required |
value | Specifies the return value of the method | string type, required. Currently, the item can be numeric and string types. If the item (return value) is string, double quotes are required, like "chaos". |
pid | The Java process ID where the fault is to be injected | int type, required |
port | The 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. |
uid | The experiment ID | string 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
| Parameter | Description | Value |
|---|---|---|
action | The action of the experiment | Set to "rule-data" |
rule-data | Specifies the Byteman configuration data | string type, required |
pid | The Java process ID where the fault is to be injected | int type, required |
port | The 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. |
uid | The experiment ID | string 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"}