Description
What happened?
Looking to use Azure Application Insights for tracing within my installation of Selenium Grid (fully distributed), instead of using Jaeger. I followed the docs for installing the agent along side the Selenium jar (see AppInsights Agent Docs), and added an initContainer to each of the Selenium Grid component deployments. All of the other components pick-up the AppInsights Java Agent and check-in with Azure, except for the Event Bus. As well, no browser nodes are able to check-in with the Grid.
However, when I remove the initContainer from just the Event Bus deployment, and remove the JAVA_TOOL_OPTIONS
and APPLICATIONINSIGHTS_CONNECTION_STRING
env vars from just there, the Event Bus does not throw the errors, and browser nodes are able to register with the grid.
Expectations:
- Event Bus uses the Java agent to self-register within Azure AppInsights application map
- Nodes are able register
As part of my troubleshooting, I tried using a different Java Agent, and the Event Bus container outputs the same errors (see logs).
Link to Azure AppInsights Agent Docs
Link to Open-Telemetry Agent Docs
Command used to start Selenium Grid with Docker (or Kubernetes)
# Source: selenium-grid/templates/event-bus-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: selenium-grid-selenium-event-bus-config
namespace: selenium-grid-demo-ns
labels:
app.kubernetes.io/managed-by: helm
app.kubernetes.io/instance: selenium-grid
app.kubernetes.io/version: 4.29.0-20250303
app.kubernetes.io/component: selenium-grid-4.29.0-20250303
helm.sh/chart: selenium-grid-0.40.1
data:
SE_EVENT_BUS_HOST: "selenium-grid-selenium-event-bus"
SE_EVENT_BUS_PUBLISH_PORT: "4442"
SE_EVENT_BUS_SUBSCRIBE_PORT: "4443"
SE_JAVA_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000 -XX:MaxRAMPercentage=100 -Dos.name=linux"
start-selenium-grid-eventbus.sh: |-
#!/usr/bin/env bash
# set -e: exit asap if a command exits with a non-zero status
set -e
echo "Starting Selenium Grid EventBus..."
function append_se_opts() {
local option="${1}"
local value="${2:-""}"
local log_message="${3:-true}"
if [[ "${SE_OPTS}" != *"${option}"* ]]; then
if [ "${log_message}" = "true" ]; then
echo "Appending Selenium option: ${option} ${value}"
else
echo "Appending Selenium option: ${option} $(mask ${value})"
fi
SE_OPTS="${SE_OPTS} ${option}"
if [ ! -z "${value}" ]; then
SE_OPTS="${SE_OPTS} ${value}"
fi
else
echo "Selenium option: ${option} already set in env variable SE_OPTS. Ignore new option: ${option} ${value}"
fi
}
if [ ! -z "$SE_EVENT_BUS_HOST" ]; then
echo "Using SE_EVENT_BUS_HOST: ${SE_EVENT_BUS_HOST}"
HOST_CONFIG="--host ${SE_EVENT_BUS_HOST}"
fi
if [ ! -z "$SE_EVENT_BUS_PORT" ]; then
echo "Using SE_EVENT_BUS_PORT: ${SE_EVENT_BUS_PORT}"
PORT_CONFIG="--port ${SE_EVENT_BUS_PORT}"
fi
if [ ! -z "$SE_OPTS" ]; then
echo "Appending Selenium options: ${SE_OPTS}"
fi
if [ ! -z "$SE_LOG_LEVEL" ]; then
append_se_opts "--log-level" "${SE_LOG_LEVEL}"
fi
if [ ! -z "$SE_HTTP_LOGS" ]; then
append_se_opts "--http-logs" "${SE_HTTP_LOGS}"
fi
if [ ! -z "$SE_STRUCTURED_LOGS" ]; then
append_se_opts "--structured-logs" "${SE_STRUCTURED_LOGS}"
fi
if [ ! -z "$SE_EXTERNAL_URL" ]; then
append_se_opts "--external-url" "${SE_EXTERNAL_URL}"
fi
if [ "${SE_ENABLE_TLS}" = "true" ]; then
# Configure truststore for the server
if [ ! -z "$SE_JAVA_SSL_TRUST_STORE" ]; then
echo "Appending Java options: -Djavax.net.ssl.trustStore=${SE_JAVA_SSL_TRUST_STORE}"
SE_JAVA_OPTS="$SE_JAVA_OPTS -Djavax.net.ssl.trustStore=${SE_JAVA_SSL_TRUST_STORE}"
fi
if [ -f "${SE_JAVA_SSL_TRUST_STORE_PASSWORD}" ]; then
echo "Getting Truststore password from ${SE_JAVA_SSL_TRUST_STORE_PASSWORD} to set Java options: -Djavax.net.ssl.trustStorePassword"
SE_JAVA_SSL_TRUST_STORE_PASSWORD="$(cat ${SE_JAVA_SSL_TRUST_STORE_PASSWORD})"
fi
if [ ! -z "${SE_JAVA_SSL_TRUST_STORE_PASSWORD}" ]; then
echo "Appending Java options: -Djavax.net.ssl.trustStorePassword=$(mask ${SE_JAVA_SSL_TRUST_STORE_PASSWORD})"
SE_JAVA_OPTS="$SE_JAVA_OPTS -Djavax.net.ssl.trustStorePassword=${SE_JAVA_SSL_TRUST_STORE_PASSWORD}"
fi
echo "Appending Java options: -Djdk.internal.httpclient.disableHostnameVerification=${SE_JAVA_DISABLE_HOSTNAME_VERIFICATION}"
SE_JAVA_OPTS="$SE_JAVA_OPTS -Djdk.internal.httpclient.disableHostnameVerification=${SE_JAVA_DISABLE_HOSTNAME_VERIFICATION}"
# Configure certificate and private key for component communication
if [ ! -z "$SE_HTTPS_CERTIFICATE" ]; then
append_se_opts "--https-certificate" "${SE_HTTPS_CERTIFICATE}"
fi
if [ ! -z "$SE_HTTPS_PRIVATE_KEY" ]; then
append_se_opts "--https-private-key" "${SE_HTTPS_PRIVATE_KEY}"
fi
fi
EXTRA_LIBS=""
if [ "${SE_ENABLE_TRACING}" = "true" ] && [ -n "${SE_OTEL_EXPORTER_ENDPOINT}" ]; then
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
[ -n "$EXTRA_LIBS" ] && [ -n "${EXTERNAL_JARS}" ] && EXTRA_LIBS=${EXTRA_LIBS}:
EXTRA_LIBS="--ext "${EXTRA_LIBS}${EXTERNAL_JARS}
echo "Tracing is enabled"
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
if [ -n "$SE_OTEL_SERVICE_NAME" ]; then
SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.resource.attributes=service.name=${SE_OTEL_SERVICE_NAME}"
fi
if [ -n "$SE_OTEL_TRACES_EXPORTER" ]; then
SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.traces.exporter=${SE_OTEL_TRACES_EXPORTER}"
fi
if [ -n "$SE_OTEL_EXPORTER_ENDPOINT" ]; then
SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.exporter.otlp.endpoint=$(envsubst < <(echo ${SE_OTEL_EXPORTER_ENDPOINT}))"
fi
if [ -n "$SE_OTEL_JAVA_GLOBAL_AUTOCONFIGURE_ENABLED" ]; then
SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.java.global-autoconfigure.enabled=${SE_OTEL_JAVA_GLOBAL_AUTOCONFIGURE_ENABLED}"
fi
if [ -n "$SE_OTEL_JVM_ARGS" ]; then
SE_JAVA_OPTS="$SE_JAVA_OPTS ${SE_OTEL_JVM_ARGS}"
fi
else
if [ -n "${APPLICATIONINSIGHTS_CONNECTION_STRING}" ]; then
echo "Using Azure App Insights"
APPLICATIONINSIGHTS_ROLE_NAME="${SE_OTEL_SERVICE_NAME}"
if [ -n "$SE_OTEL_JAVA_GLOBAL_AUTOCONFIGURE_ENABLED" ]; then
SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.java.global-autoconfigure.enabled=${SE_OTEL_JAVA_GLOBAL_AUTOCONFIGURE_ENABLED}"
fi
if [ -n "$SE_OTEL_TRACES_EXPORTER" ]; then
SE_OTEL_JVM_ARGS="$SE_OTEL_JVM_ARGS -Dotel.traces.exporter=${SE_OTEL_TRACES_EXPORTER}"
fi
if [ -n "$SE_OTEL_JVM_ARGS" ]; then
SE_JAVA_OPTS="$SE_JAVA_OPTS ${SE_OTEL_JVM_ARGS}"
fi
else
append_se_opts "--tracing" "false"
SE_JAVA_OPTS="$SE_JAVA_OPTS -Dwebdriver.remote.enableTracing=false"
echo "Tracing is disabled"
fi
fi
if [ -n "${SE_JAVA_HTTPCLIENT_VERSION}" ]; then
SE_JAVA_OPTS="$SE_JAVA_OPTS -Dwebdriver.httpclient.version=${SE_JAVA_HTTPCLIENT_VERSION}"
fi
if [ -n "${SE_JAVA_OPTS_DEFAULT}" ]; then
SE_JAVA_OPTS="${SE_JAVA_OPTS_DEFAULT} $SE_JAVA_OPTS"
fi
if [ -n "${JAVA_OPTS:-$SE_JAVA_OPTS}" ]; then
echo "Using JAVA_OPTS: ${JAVA_OPTS:-$SE_JAVA_OPTS}"
fi
function handle_heap_dump() {
/opt/bin/handle_heap_dump.sh /opt/selenium/logs
}
if [ "${SE_JAVA_HEAP_DUMP}" = "true" ]; then
trap handle_heap_dump ERR SIGTERM SIGINT
else
trap handle_heap_dump ERR
fi
java ${JAVA_OPTS:-$SE_JAVA_OPTS} \
-jar /opt/selenium/selenium-server.jar \
${EXTRA_LIBS} event-bus \
--bind-host ${SE_BIND_HOST} \
${HOST_CONFIG} \
${PORT_CONFIG} \
${SE_OPTS}
---
# Source: selenium-grid/templates/event-bus-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: selenium-grid-selenium-event-bus
namespace: selenium-grid-demo-ns
labels: &event_bus_labels
app: selenium-grid-selenium-event-bus
app.kubernetes.io/name: selenium-grid-selenium-event-bus
app.kubernetes.io/managed-by: helm
app.kubernetes.io/instance: selenium-grid
app.kubernetes.io/version: 4.29.0-20250303
app.kubernetes.io/component: selenium-grid-4.29.0-20250303
helm.sh/chart: selenium-grid-0.40.1
spec:
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: selenium-grid-selenium-event-bus
app.kubernetes.io/instance: selenium-grid
template:
metadata:
labels: *event_bus_labels
annotations:
checksum/logging-configmap: 340341e72ca26257adeb74743bec46d3a16f7a94cbe37ac71703d23bf1a4144e
checksum/server-configmap: bd08b4ce23320321f4ef8e3903ff63e449101c0e0c8bdd76957ff7974b30d37e
checksum/secrets: 8068a715b5d90514c7f111b339be79a8d9915ad9391c853e2ba8afa1d58a8df6
spec:
serviceAccountName: selenium-grid-selenium-serviceaccount
serviceAccount: selenium-grid-selenium-serviceaccount
initContainers:
- name: app-insights-clone
image: selenium/hub:4.29.0-20250303
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c"]
args: ["wget -P /tmp/jars https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar"]
# args: ["wget -P /tmp/jars https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.7.1/applicationinsights-agent-3.7.1.jar"]
volumeMounts:
- mountPath: /tmp/jars
name: appinsights-jar
containers:
- name: selenium-grid-selenium-event-bus
image: selenium/event-bus:4.29.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5557
protocol: TCP
- containerPort: 4442
protocol: TCP
- containerPort: 4443
protocol: TCP
env:
- name: KUBERNETES_NODE_HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: APPLICATIONINSIGHTS_ROLE_NAME
value: 'selenium-grid-selenium-event-bus'
- name: SE_OTEL_SERVICE_NAME
value: 'selenium-grid-selenium-event-bus'
- name: SE_EVENT_BUS_HOST
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: SE_EVENT_BUS_PORT
value: "5557"
- name: SE_LOG_LEVEL
value: "FINEST"
- name: APPLICATIONINSIGHTS_CONNECTION_STRING
value: ""
- name: JAVA_TOOL_OPTIONS
value: "-javaagent:/tmp/jars/opentelemetry-javaagent.jar"
envFrom:
- configMapRef:
name: selenium-grid-selenium-logging-config
- configMapRef:
name: selenium-grid-selenium-server-config
- secretRef:
name: selenium-grid-selenium-secrets
- secretRef:
name: selenium-grid-selenium-basic-auth-secrets
volumeMounts:
- mountPath: /opt/bin/start-selenium-grid-eventbus.sh
name: selenium-grid-selenium-event-bus-config
subPath: start-selenium-grid-eventbus.sh
- mountPath: /tmp/jars
name: appinsights-jar
resources:
limits:
cpu: "1"
memory: 2Gi
requests:
cpu: "0.5"
memory: 512Mi
volumes:
- name: "selenium-grid-selenium-event-bus-config"
configMap:
name: selenium-grid-selenium-event-bus-config
defaultMode: 493
- emptyDir: {}
name: appinsights-jar
Relevant log output
# Opentelemetry-Agent Logs
15:02:23.308 DEBUG [PlatformDependent0.<clinit>] - direct buffer constructor: unavailable
java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
at io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
at io.netty.util.internal.PlatformDependent0$5.run(PlatformDependent0.java:332)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:325)
at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:334)
at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:90)
at io.netty.channel.nio.NioEventLoop.<clinit>(NioEventLoop.java:84)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:182)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:38)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60)
at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:97)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:92)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:73)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:53)
at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:102)
at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:68)
at org.openqa.selenium.grid.commands.EventBusCommand$1.<init>(EventBusCommand.java:158)
at org.openqa.selenium.grid.commands.EventBusCommand.asServer(EventBusCommand.java:133)
at org.openqa.selenium.grid.commands.EventBusCommand.execute(EventBusCommand.java:186)
at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:122)
at org.openqa.selenium.grid.Main.launch(Main.java:83)
at org.openqa.selenium.grid.Main.go(Main.java:56)
at org.openqa.selenium.grid.Main.main(Main.java:41)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "direct buffer constructor: unavailable","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-18T15:02:23.308Z","log-time-utc": "2025-03-18T15:02:23.308Z","method": "\u003cclinit>"}
15:02:23.316 DEBUG [PlatformDependent0.<clinit>] - java.nio.Bits.unaligned: available, true
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "java.nio.Bits.unaligned: available, true","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-18T15:02:23.316Z","log-time-utc": "2025-03-18T15:02:23.316Z","method": "\u003cclinit>"}
15:02:23.320 DEBUG [PlatformDependent0.<clinit>] - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
java.lang.IllegalAccessException: class io.netty.util.internal.PlatformDependent0$7 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @1757cd72
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:714)
at java.base/java.lang.reflect.Method.invoke(Method.java:571)
at io.netty.util.internal.PlatformDependent0$7.run(PlatformDependent0.java:468)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:459)
at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:334)
at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:90)
at io.netty.channel.nio.NioEventLoop.<clinit>(NioEventLoop.java:84)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:182)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:38)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60)
at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:97)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:92)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:73)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:53)
at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:102)
at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:68)
at org.openqa.selenium.grid.commands.EventBusCommand$1.<init>(EventBusCommand.java:158)
at org.openqa.selenium.grid.commands.EventBusCommand.asServer(EventBusCommand.java:133)
at org.openqa.selenium.grid.commands.EventBusCommand.execute(EventBusCommand.java:186)
at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:122)
at org.openqa.selenium.grid.Main.launch(Main.java:83)
at org.openqa.selenium.grid.Main.go(Main.java:56)
at org.openqa.selenium.grid.Main.main(Main.java:41)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-18T15:02:23.32Z","log-time-utc": "2025-03-18T15:02:23.32Z","method": "\u003cclinit>"}
# Azure ApplicationInsights Agent Logs
22:32:36.926 DEBUG [PlatformDependent0.<clinit>] - direct buffer constructor: unavailable
java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
at io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
at io.netty.util.internal.PlatformDependent0$5.run(PlatformDependent0.java:332)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:325)
at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:334)
at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:90)
at io.netty.channel.nio.NioEventLoop.<clinit>(NioEventLoop.java:84)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:182)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:38)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60)
at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:97)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:92)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:73)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:53)
at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:102)
at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:68)
at org.openqa.selenium.grid.commands.EventBusCommand$1.<init>(EventBusCommand.java:158)
at org.openqa.selenium.grid.commands.EventBusCommand.asServer(EventBusCommand.java:133)
at org.openqa.selenium.grid.commands.EventBusCommand.execute(EventBusCommand.java:186)
at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:122)
at org.openqa.selenium.grid.Main.launch(Main.java:83)
at org.openqa.selenium.grid.Main.go(Main.java:56)
at org.openqa.selenium.grid.Main.main(Main.java:41)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "direct buffer constructor: unavailable","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-17T22:32:36.926Z","log-time-utc": "2025-03-17T22:32:36.926Z","method": "\u003cclinit>"}
22:32:36.937 DEBUG [PlatformDependent0.<clinit>] - java.nio.Bits.unaligned: available, true
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "java.nio.Bits.unaligned: available, true","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-17T22:32:36.937Z","log-time-utc": "2025-03-17T22:32:36.937Z","method": "\u003cclinit>"}
22:32:36.938 DEBUG [PlatformDependent0.<clinit>] - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
java.lang.IllegalAccessException: class io.netty.util.internal.PlatformDependent0$7 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @43bd930a
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:714)
at java.base/java.lang.reflect.Method.invoke(Method.java:571)
at io.netty.util.internal.PlatformDependent0$7.run(PlatformDependent0.java:468)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:459)
at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:334)
at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:90)
at io.netty.channel.nio.NioEventLoop.<clinit>(NioEventLoop.java:84)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:182)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:38)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60)
at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:97)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:92)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:73)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:53)
at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:102)
at org.openqa.selenium.netty.server.NettyServer.<init>(NettyServer.java:68)
at org.openqa.selenium.grid.commands.EventBusCommand$1.<init>(EventBusCommand.java:158)
at org.openqa.selenium.grid.commands.EventBusCommand.asServer(EventBusCommand.java:133)
at org.openqa.selenium.grid.commands.EventBusCommand.execute(EventBusCommand.java:186)
at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:122)
at org.openqa.selenium.grid.Main.launch(Main.java:83)
at org.openqa.selenium.grid.Main.go(Main.java:56)
at org.openqa.selenium.grid.Main.main(Main.java:41)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
{"class": "PlatformDependent0","log-level": "DEBUG","log-message": "jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable","log-name": "io.netty.util.internal.PlatformDependent0","log-time-local": "2025-03-17T22:32:36.938Z","log-time-utc": "2025-03-17T22:32:36.938Z","method": "\u003cclinit>"}
Operating System
Kubernetes (AKS)
Docker Selenium version (image tag)
4.29.0-20250303
Selenium Grid chart version (chart version)
0.40.1