When operating VMware Tanzu Elastic Application Runtime (TAS), users may observe the following issues:
Tanzu Elastic Application Runtime (TAS).
In virtualized environments, "Ready Time" (vSphere metric) represents the time a Virtual Machine (VM) waits for physical CPU resources. By default, Linux guests on vSphere are often unaware of this wait time, leading to gaps in observability.
When a VM is "stolen" cycles by the hypervisor to serve other VMs or host processes, this is known as CPU Steal Time. Without specific configuration, the guest OS may attribute this lost time to "System" or "User" usage, or simply not report it at all, making it difficult to distinguish between an application that is legitimately busy and an application that is being throttled by the underlying infrastructure.
To improve observability and address performance bottlenecks, you can enable the stealclock.enable flag in the VMX options of your TAS VMs. This requires a compatible Linux kernel (SLES 15, SLES 12 SP5+, or Ubuntu versions used in recent Stemcells) and vSphere Hardware Version 13 or newer.
Run these commands to authenticate and identify your TAS Product GUID from an SSH session to the Opsman VM.
env.yml file as detailed in the Authenticate with the Tanzu Operations Manager CLI documentation.
export PRODUCT_GUID=$(om -e env.yml -k curl -s -p /api/v0/staged/products -x GET | jq -r '.[] | select(.type=="cf") | .guid')Define the stealclock.enable VMX option globally in the Ops Manager Director.
om -e env.yml -k curl -s -p /api/v0/staged/vm_extensions -x POST -d \'{"vm_extension": {"name": "enable-cpu-steal", "cloud_properties": {"vmx_options": {"stealclock.enable": "TRUE"}}}}'
Run these three commands in order. They will download every job's config, inject the extension, and push the changes back to the API.
mkdir /tmp/resource_config_updates
/tmp/resource_config_updates.om -e env.yml -k curl -s -p /api/v0/staged/products/$PRODUCT_GUID/jobs | jq -r '.jobs[] | "\(.guid) \(.name)"' | while read -r JOB_GUID JOB_NAME; do \ echo "Exporting $JOB_NAME..."; \ om -e env.yml -k curl -s -p /api/v0/staged/products/$PRODUCT_GUID/jobs/$JOB_GUID/resource_config > "/tmp/resource_config_updates/${JOB_GUID}.json"; \done.json files to add the Extension:enable-cpu-steal" to the additional_vm_extensions array in every downloaded file.for f in /tmp/resource_config_updates/*.json; do \ jq '.additional_vm_extensions += ["enable-cpu-steal"] | .additional_vm_extensions |= unique' "$f" > "$f.tmp" && mv "$f.tmp" "$f"; \done.json files in /tmp/resource_config_updates and performs a PUT request to update the staged configuration in Ops Manager.for f in /tmp/resource_config_updates/*.json; do \ JOB_GUID=$(basename "$f" .json); \ echo "Uploading configuration for GUID: $JOB_GUID..."; \ om -e env.yml -k curl -s -p /api/v0/staged/products/$PRODUCT_GUID/jobs/$JOB_GUID/resource_config -x PUT -d @"$f"; \done
After the deployment finishes, SSH into any VM (e.g., a Diego Cell) and run top.