JVM Thread Actual Memory Usage

As containerized environments become prevalent (like Kubernetes), knowing the physical memory that will be used by the JVM becomes ever more important. Typical thread-per-request web frameworks can easily use thousands of threads, which can contribute to the memory footprint. In this article I explore the base amount of physical memory a JVM thread stack uses on Linux. This can help guide decisions on sizing of thread pools.

Continue reading “JVM Thread Actual Memory Usage”

IPVS with Kubernetes Ingress

updated: 2018-06-05 Replace gorb with merlin.

In addition to the Kubernetes stack on AWS, I’m also helping to build an on-premise Kubernetes platform. We want to continue to leverage feed, the ingress controller we built. Ingress generally requires an external IP load balancer to front requests from the internet and elsewhere. In AWS we use ELBs. For on-premise, we need to build our own.

The solution we’ve settled on for now is:

  • IPVS with consistent hashing (using built-in source hash module) and direct-return.
  • merlin to provide an API for ipvs so our ingress controller can attach and detach itself.
  • VIPs registered to a DNS entry with active/passive failover, handled by keepalived.

Continue reading “IPVS with Kubernetes Ingress”

Assign an automatic JMX port to a Java application

VisualVM and jconsole are two useful tools for debugging JVM issues. However they both rely on a JMX port to be open on the remote instance. You can work around this on the fly by running jstatd on the remote host, but you’ll find certain things disabled. So ideally, the jmx port will be enabled on startup.

Continue reading “Assign an automatic JMX port to a Java application”