Skip to main content

Linux JVM method exception

Linux JVM method exception injects chaos into a Java application to invoke an exception.

tip

JVM chaos faults use the Byteman utility to inject chaos faults into the JVM.

Linux JVM method exception

Use cases

JVM method exception:

  • Determines the performance and resilience of an application (or service) on encountering exceptions.
  • Determines how efficiently an application recovers the services.
note
  • This fault can be executed on Ubuntu 16 or higher, Debian 10 or higher, CentOS 7 or higher, RHEL 7 or higher, Fedora 30 or higher, and openSUSE LEAP 15.4 or higher.
  • The linux-chaos-infrastructure systemd service should be in an active state, and the infrastructure should be in CONNECTED state.

Fault permissions

The fault uses the root Linux user and root user group.

Mandatory tunables

Tunable Description Notes
class Specify as packageName.className that specifies the class in which you define the exception. For example, org.framework.appName.system.WelcomeController. For more information, go to class name.
exception The exception you want to throw. For example, NullPointerException("Something went wrong!"). For more information, go to exception name.
method The method to which exception is applied. For example, Welcome. For more information, go to method name.
pid The process ID (integer) that Byteman uses to target the service. This is mutually exclusive with startupCommand. If pid is specified (other than 0), startupCommand is not required. For example, 6429. For more information, go to process Id.
startupCommand The command used to start the Java process. A substring match is used with the given command for all processes. This is mutually exclusive with pid. If startupCommand is specified, you need to set pid to 0. For example, /usr/local/bin/pet-clinic.jar. For more information, go to startup command.

Optional tunables

Tunable Description Notes
duration Duration through which chaos is injected into the target resource. Should be provided in [numeric-hours]h[numeric-minutes]m[numeric-seconds]s format. Default: 30s. Examples: 1m25s, 1h3m2s, 1h3s. For more information, go to duration of the chaos.
rampTime Period to wait before and after injecting chaos. Should be provided in [numeric-hours]h[numeric-minutes]m[numeric-seconds]s format. Default: 0s. Examples: 1m25s, 1h3m2s, 1h3s. For more information, go to ramp time.
port Port used by the Byteman agent. Default: 9091.

Class name

The class input variable targets the class name where the exception is present. Specify it in the format packageName.className.

The following YAML snippet illustrates the use of this input variable:

apiVersion: litmuchaos.io/v1alpha1
kind: LinuxFault
metadata:
name: linux-jvm-method-exception
labels:
name: jvm-method-exception
spec:
jvmChaos/inputs:
duration: 30s
port: 9091
pid: 0
class: "org.framework.appName.system.WelcomeController"
method: ""
exception: ""
startupCommand: "/usr/bin/pet-clinic.jar"
rampTime: ""

Exception

The exception you want to throw to the Java application.

The following YAML snippet illustrates the use of this input variable:

apiVersion: litmuchaos.io/v1alpha1
kind: LinuxFault
metadata:
name: linux-jvm-method-exception
labels:
name: jvm-method-exception
spec:
jvmChaos/inputs:
duration: 30s
port: 9091
pid: 0
class: ""
method: ""
exception: "NullPointerException("Something went wrong!")"
startupCommand: "/usr/bin/pet-clinic.jar"
rampTime: ""

Method

The method name on which you apply the exception input variable.

The following YAML snippet illustrates the use of this input variable:

apiVersion: litmuchaos.io/v1alpha1
kind: LinuxFault
metadata:
name: linux-jvm-method-exception
labels:
name: jvm-method-exception
spec:
jvmChaos/inputs:
duration: 30s
port: 9091
pid: 0
class: ""
method: "welcome"
exception: ""
startupCommand: "/usr/bin/pet-clinic.jar"
rampTime: ""

Pid

The process ID used by Byteman to target the services of the Java application. This is mutually exclusive with the startupCommand input variable.

The following YAML snippet illustrates the use of this input variable:

apiVersion: litmuchaos.io/v1alpha1
kind: LinuxFault
metadata:
name: linux-jvm-method-exception
labels:
name: jvm-method-exception
spec:
jvmChaos/inputs:
duration: 30s
port: 9091
pid: 1
class: ""
method: ""
exception: ""
rampTime: ""

Startup command

The command used to start the Java process. A substring match is used with the given command for all processes. This is mutually exclusive with the pid input variable.

The following YAML snippet illustrates the use of this input variable:

apiVersion: litmuchaos.io/v1alpha1
kind: LinuxFault
metadata:
name: linux-jvm-method-exception
labels:
name: jvm-method-exception
spec:
jvmChaos/inputs:
duration: 30s
port: 9091
pid: 0
class: ""
method: ""
exception: ""
startupCommand: "/usr/bin/pet-clinic.jar"
rampTime: ""