使用 JMX/MBeans 监控 Cassandra CPU 使用情况
Monitoring Cassandra CPU usage with JMX/MBeans
我想编写一个简单的 Java 代码来使用 JMX 监控 Cassandra 数据库。现在我一直在检索数据库的 CPU 使用情况。据我所知,一个可能的 MBean 是具有属性 ProcessCpuLoad
.
的 java.lang:type=OperatingSystem
但是,在这种情况下,结果似乎是 CPU 使用 JVM 中的所有进程 运行,而不仅仅是 Cassandra 线程。这个假设是否正确?
我还想知道在使用 JConsole 连接到数据库时 CPU 使用情况显示的是什么数据。是否可以直接访问这些值(我的意思是没有 JConsole)?或者是否有另一个 Mbean 可以准确给出所需的值?
谢谢,
妮可
ProcessCpuLoad
在 OS mbean 中是正确的。它不是所有的 JVM,只是报告它的一个 JVM。您在单个 JVM 中没有多个进程 运行,JVM 作为每个 java 应用程序的单个进程运行。
您可以使用 java.lang:type=Threading
来监控花费在单个线程上的 cpu 时间,但 Cassandra 中有大量线程,它可能永远不会完全正确(错过诸如 GC 时间之类的东西)。
如果不想使用 jconsole,您可以查看:
ps -p <whatever-your-cassandra-pid-is> -o %cpu
# or depending on OS/installer
ps -p `cat /var/run/cassandra.pid` -o %cpu
我想编写一个简单的 Java 代码来使用 JMX 监控 Cassandra 数据库。现在我一直在检索数据库的 CPU 使用情况。据我所知,一个可能的 MBean 是具有属性 ProcessCpuLoad
.
java.lang:type=OperatingSystem
但是,在这种情况下,结果似乎是 CPU 使用 JVM 中的所有进程 运行,而不仅仅是 Cassandra 线程。这个假设是否正确?
我还想知道在使用 JConsole 连接到数据库时 CPU 使用情况显示的是什么数据。是否可以直接访问这些值(我的意思是没有 JConsole)?或者是否有另一个 Mbean 可以准确给出所需的值?
谢谢, 妮可
ProcessCpuLoad
在 OS mbean 中是正确的。它不是所有的 JVM,只是报告它的一个 JVM。您在单个 JVM 中没有多个进程 运行,JVM 作为每个 java 应用程序的单个进程运行。
您可以使用 java.lang:type=Threading
来监控花费在单个线程上的 cpu 时间,但 Cassandra 中有大量线程,它可能永远不会完全正确(错过诸如 GC 时间之类的东西)。
如果不想使用 jconsole,您可以查看:
ps -p <whatever-your-cassandra-pid-is> -o %cpu
# or depending on OS/installer
ps -p `cat /var/run/cassandra.pid` -o %cpu