Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Command line 如何仅从命令行从jmx接口提取jmx统计信息?_Command Line_Jmx - Fatal编程技术网

Command line 如何仅从命令行从jmx接口提取jmx统计信息?

Command line 如何仅从命令行从jmx接口提取jmx统计信息?,command-line,jmx,Command Line,Jmx,我想通过jmx提取这些数据,但只使用命令行 这是因为这是进入我得到的服务器的唯一方法 任何指针都会有帮助 提前感谢我推荐的CLI访问和基于readline的JMX shell。不过,它们需要服务器端的代理。这些制剂有几种口味(war、osgi、mule、jdk6)。由于memcached session manager在Tomcat中运行,您可能应该使用WAR代理并将其放入webapps/目录中。我是在对JMX协议无法通过ssh进行隧道传输进行了猛烈抨击之后,提出了这个快速、肮脏的解决方案。 (

我想通过jmx提取这些数据,但只使用命令行

这是因为这是进入我得到的服务器的唯一方法

任何指针都会有帮助


提前感谢我推荐的CLI访问和基于readline的JMX shell。不过,它们需要服务器端的代理。这些制剂有几种口味(war、osgi、mule、jdk6)。由于
memcached session manager
在Tomcat中运行,您可能应该使用WAR代理并将其放入
webapps/
目录中。

我是在对JMX协议无法通过ssh进行隧道传输进行了猛烈抨击之后,提出了这个快速、肮脏的解决方案。 (1) 找到了一些jmxterm东西,(2)将一些简单的命令放入其中(运行MBean操作)(在检查了JConsole在连接到本地tomcat时所做的工作之后…)并(3)将其格式化为可读的格式

#!/bin/bash

# wget http://downloads.sourceforge.net/cyclops-group/jmxterm-1.0-alpha-4-uber.jar

JARFILE="jmxterm-1.0-alpha-4-uber.jar"
JMXHOST=127.0.0.1
JMXPORT=9003

function die() { echo $1 ; exit 1 ; }
function checkexe() { [ -x `which $1` ] || die "cant find executable program $1" ; }

PROGS="java grep cat sed tr xsltproc xmllint"
for P in $PROGS ; do checkexe $P ; done
[ -f $JARFILE ] || die "can't see jar file $JARFILE"

## jmxterm commands to get thread stack dump
cat >/tmp/myscript.jmx<<EOF
domain java.lang
bean java.lang:type=Threading
run dumpAllThreads 1 1 
quit
EOF

## get the stack traces
java -jar $JARFILE -l $JMXHOST:$JMXPORT -i /tmp/myscript.jmx > /tmp/allthreads.txt

grep "threadId" /tmp/allthreads.txt || die "stack trace get seemed to fail ?!"

## turn them into xml
cat /tmp/allthreads.txt | \
    sed \
        -e "s|\[ |<array>|g" -e "s| \]|</array>|g" \
        -e "s|{|<obj>|g" -e "s|}|</obj>|g" \
        -e "s|\([^ <>]*\) = \([^ <>]*\);|<\1>\2</\1>|g" \
        -e "s|\([^ ]*\) = \([^;]*\) *;|<\1>\2</\1>|g" | \
    tr '\r\n\t' ' ' | tr -s ' ' | \
    sed \
        -e "s|\([^ =]*\) = \([^;=]*\);|<\1>\2</\1>|g" \
        -e "s|\([^ ]*\) = \([^;]*\);|<\1>\2</\1>|g"\
        -e "s| *, *||g"  > /tmp/allthreads.xml

## xsl to convert xml-ified stack traces to simpler format
cat >/tmp/jmxterm_threads.xslt<<EOF
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <jmx>
            <xsl:for-each select="/array/obj">
                <xsl:sort select="threadId" data-type="number"/>
                <xsl:apply-templates select="." mode="thread"/>
            </xsl:for-each>
        </jmx>
    </xsl:template>
    <xsl:template match="obj" mode="thread">
        <thread id="{threadId/text()}">
            <xsl:copy-of select="threadName"/>
            <xsl:copy-of select="threadState"/>
            <xsl:copy-of select="suspended"/>
            <xsl:copy-of select="inNative"/>
            <xsl:copy-of select="waitedCount"/>
            <xsl:copy-of select="blockedCount"/>
            <xsl:apply-templates select="stackTrace"/>
        </thread>
    </xsl:template>
    <xsl:template match="stackTrace">
        <stackTrace>
            <xsl:for-each select="./array/obj">
                <stackfn class="{className}" method="{methodName}" file="{fileName}" line="{lineNumber}"/>
            </xsl:for-each>
        </stackTrace>
        </xsl:template>
</xsl:stylesheet>
EOF

## simplify xml
xsltproc /tmp/jmxterm_threads.xslt /tmp/allthreads.xml | xmllint --format - > /tmp/allthreads_simple.xml

cat /tmp/allthreads_simple.xml
#/bin/bash
#wgethttp://downloads.sourceforge.net/cyclops-group/jmxterm-1.0-alpha-4-uber.jar
JARFILE=“jmxterm-1.0-alpha-4-uber.jar”
JMXHOST=127.0.0.1
jxport=9003
函数die(){echo$1;exit 1;}
函数checkexe(){[-x`which$1`]| | die“找不到可执行程序$1”}
PROGS=“java grep cat sed tr xsltproc xmllint”
以$PROGS表示的P;检查EXE$P;完成
[-f$JARFILE]| | die“看不到jar文件$JARFILE”
##获取线程堆栈转储的jmxterm命令
cat>/tmp/myscript.jmx/tmp/allthreads.xml
##xsl将xml堆栈跟踪转换为更简单的格式
cat>/tmp/jmxterm_threads.xsltA google for“jmx命令行”返回大量点击。。。你看过那些吗?