Ranjeet Kumar
02/16/2026, 2:56 PMLari Hotari
02/16/2026, 4:37 PMzookeeper.configData.PULSAR_MEM in the values.yaml file. The default -Xms64m -Xmx128m is very low. You could bump it to -Xms256m -Xmx512m
• One of the significant differences made in the Pulsar Helm chart defaults is the switch from G1GC to ZGC. It's possible that ZGC uses slightly more RAM than G1GC. This change is included since Helm chart version 4.3.0 (commit: https://github.com/apache/pulsar-helm-chart/commit/6f1585e65e67c8890b7973e8fd574fd1b990101f).Ranjeet Kumar
02/16/2026, 5:43 PMLari Hotari
02/16/2026, 6:02 PMLari Hotari
02/16/2026, 6:04 PMRanjeet Kumar
02/16/2026, 6:12 PMName: zookeeper-1
Namespace: integration
Priority: 0
Service Account: zookeeper
Node: 172.19.6.139/172.19.6.139
Start Time: Thu, 12 Feb 2026 04:01:37 +0530
Labels: app=pulsar
cluster=integration-pulsar
component=zookeeper
controller-revision-hash=zookeeper-75b4cc68f8
harness.io/release-name=release-2b5e4a
statefulset.kubernetes.io/pod-name=zookeeper-1
Annotations: prometheus.io/port: 8000
prometheus.io/scrape: false
Status: Terminating (lasts 93m)
Termination Grace Period: 30s
IP: 10.103.16.253
IPs:
IP: 10.103.16.253
Controlled By: StatefulSet/zookeeper
Containers:
pulsar-zookeeper:
Container ID: <cri-o://c5e706134f3fb9d4f049f1e3b3c46ce05c7b63bf26472f56be090c4af1708ce>b
Image: ghcr.io/xcorp/pulsar-all:4.0.0
Image ID: 3ed45720a8bbffc60d15310cbe8d482c695cd68af8f2bd9e145c1939fd2f0030
Ports: 8000/TCP, 2181/TCP, 2888/TCP, 3888/TCP
Host Ports: 0/TCP, 0/TCP, 0/TCP, 0/TCP
Command:
sh
-c
Args:
bin/apply-config-from-env.py conf/zookeeper.conf;
bin/generate-zookeeper-config.sh conf/zookeeper.conf; OPTS="${OPTS} -Dlog4j2.formatMsgNoLookups=true" exec bin/pulsar zookeeper;
State: Terminated
Reason: Error
Exit Code: 143
Started: Thu, 12 Feb 2026 04:01:45 +0530
Finished: Mon, 16 Feb 2026 17:09:42 +0530
Ready: False
Restart Count: 0
Requests:
cpu: 4
memory: 7Gi
Liveness: exec [sh -c { echo ruok; sleep 1; } | nc 127.0.0.1 2181 | grep imok] delay=25s timeout=30s period=30s #success=1 #failure=10
Readiness: exec [sh -c { echo ruok ; sleep 1; } | nc 127.0.0.1 2181 | grep imok] delay=25s timeout=30s period=30s #success=1 #failure=10
Environment Variables from:
zookeeper ConfigMap Optional: false
Environment:
ZOOKEEPER_SERVERS: zookeeper-0,zookeeper-1,zookeeper-2
EXTERNAL_PROVIDED_SERVERS: false
Mounts:
/pulsar/data from data-vol (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-xf4sb (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
data-vol:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: data-vol-zookeeper-1
ReadOnly: false
kube-api-access-xf4sb:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events: <none>Ranjeet Kumar
02/16/2026, 6:18 PMRanjeet Kumar
02/16/2026, 6:21 PMLari Hotari
02/16/2026, 7:09 PMThis mount issue was there when we were using timeout commandIf that was the case, it was already fixed in Pulsar 4.0.2 docker images with https://github.com/apache/pulsar/pull/23667
Lari Hotari
02/16/2026, 7:11 PMLari Hotari
02/16/2026, 7:11 PMLari Hotari
02/16/2026, 7:11 PMLari Hotari
02/16/2026, 7:20 PMWe removed timeout command but still it got restarted today.
``` State: Terminated
Reason: Error
Exit Code: 143
Started: Thu, 12 Feb 2026 040145 +0530
Finished: Mon, 16 Feb 2026 170942 +0530```This might be killed by the OOM killer in the node. You might want to lower the ZooKeeper max heap size if your data size isn't large. 7GB is a lot for ZooKeeper. How much RAM do you have on your k8s nodes?
``` Requests:
cpu: 4
memory: 7Gi```Having 7Gi for requests is too low for max heap size of 7GB. You should add about 30% head room for the JVM so that the pod gets scheduled on a node that has sufficient RAM. You have 2 choices: increasing requests to 10Gi or reducing ZK heap size to around 4500M.
Ranjeet Kumar
02/17/2026, 3:41 AMLari Hotari
02/17/2026, 9:20 AMWe have not set limit for memory. K8s node is having 256 Gi of RAM.The problem I'm pointing to is that when the request is lower than the actual consumption, it could cause issues at the node level when the node's RAM is fully occupied. A JVM will use more memory than the max heap size. If you set the max heap size to 7GB, you should set requests to about 10Gi to ensure that the pod doesn't get scheduled on a node that is full.
Ranjeet Kumar
02/17/2026, 9:20 AMLari Hotari
02/17/2026, 9:22 AMLari Hotari
02/17/2026, 9:22 AM