Pocket

JMXコマンドラインツール Jmxterm

  • add this entry to hatena bookmark

JmxtermはコマンドラインベースのJMXクライアントで、Tomcat等のJava MBeanサーバにアクセスできます。jconsoleのコマンドライン版的な感じです。面白いツールなので紹介したいと思います。

Jmxtermは、GyclopsGroup.org のオープンソースJavaプロジェクトです。

利用するまでの簡易手順

利用するにはまず、以下のページから jarファイルをダウンロードします。
http://wiki.cyclopsgroup.org/jmxterm/download

2013年5月現在では、以下のファイルがダウンロードできます。
jmxterm-1.0-alpha-4-uber.jar

使い方は、以下のようにダウンロードしたjarファイルを使って、Jmxtermのコンソールで操作する形となります。

$ java -jar jmxterm-1.0-alpha-4-uber.jar
Welcome to JMX terminal. Type "help" for available commands.
$>quit
#bye
$

JMXターミナルに入ったら、helpコマンドで利用オプションを表示する事ができます。

# java -jar jmxterm-1.0-alpha-4-uber.jar
Welcome to JMX terminal. Type "help" for available commands.
$>help
#following commands are available to use:
about    - Display about page
bean     - Display or set current selected MBean.
beans    - List available beans under a domain or all domains
bye      - Terminate console and exit
close    - Close current JMX connection
domain   - Display or set current selected domain.
domains  - List all available domain names
exit     - Terminate console and exit
get      - Get value of MBean attribute(s)
help     - Display available commands or usage of a command
info     - Display detail information about an MBean
jvms     - List all running local JVM processes
open     - Open JMX session or display current connection
option   - Set options for command session
quit     - Terminate console and exit
run      - Invoke an MBean operation
set      - Set value of an MBean attribute
$>

さまざまなコマンドが用意されています。

TomcatのMBeanを確認する方法

Jmxtermを利用して、様々なJava MBeanサーバにアクセスできますが、以下にTomcatを使った利用方法を記載します。

まず、上記載例のとおり、Jmxtermターミナルに接続しておきます。

次に、Tomcatサーバにopenコマンドで接続します。(TomcatはJMXで作業端末から接続できる状態にしておく必要があります。)

# java -jar jmxterm-1.0-alpha-4-uber.jar
Welcome to JMX terminal. Type "help" for available commands.
$>
$>open (Tomcatサーバ):(JMXポート)
#Connection to (Tomcatサーバ):(JMXポート) is opened
$>domains
#following domains are available
Catalina
JMImplementation
Users
com.sun.management
java.lang
java.nio
java.util.logging
$>

Catalinaドメインを始め、幾つかのドメインが表示されます。

次に、Catalina のMBeansリストを表示してみます。CatalinaドメインのMBeansリストが沢山表示されます。

$>beans -d Catalina
#domain = Catalina:
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/,j2eeType=Servlet,name=default
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/,j2eeType=Servlet,name=jsp
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/,name=jsp,type=JspMonitor
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/docs,j2eeType=Servlet,name=default
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/docs,j2eeType=Servlet,name=jsp
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/docs,name=jsp,type=JspMonitor
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Filter,name=Compression Filter
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Filter,name=Request Dumper Filter
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Filter,name=Set Character Encoding
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Filter,name=Timing filter
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=ChatServlet
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=CompressionFilterTestServlet
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=CookieExample
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=HelloWorldExample
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=RequestHeaderExample
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=RequestInfoExample
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=RequestParamExample
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=ServletToJsp
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=SessionExample
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=async0
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=async1
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=async2
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=async3
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=default
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=jsp
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=stock
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=wsChat
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=wsEchoMessage
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=wsEchoStream
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,j2eeType=Servlet,name=wsSnake
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/examples,name=jsp,type=JspMonitor
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/host-manager,j2eeType=Filter,name=CSRF
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/host-manager,j2eeType=Filter,name=SetCharacterEncoding
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/host-manager,j2eeType=Servlet,name=HTMLHostManager
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/host-manager,j2eeType=Servlet,name=HostManager
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/host-manager,j2eeType=Servlet,name=default
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/host-manager,j2eeType=Servlet,name=jsp
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/host-manager,name=jsp,type=JspMonitor
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Filter,name=CSRF
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Filter,name=SetCharacterEncoding
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Servlet,name=HTMLManager
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Servlet,name=JMXProxy
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Servlet,name=Manager
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Servlet,name=Status
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Servlet,name=default
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,j2eeType=Servlet,name=jsp
Catalina:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/manager,name=jsp,type=JspMonitor
Catalina:J2EEApplication=none,J2EEServer=none,j2eeType=WebModule,name=//localhost/
Catalina:J2EEApplication=none,J2EEServer=none,j2eeType=WebModule,name=//localhost/docs
Catalina:J2EEApplication=none,J2EEServer=none,j2eeType=WebModule,name=//localhost/examples
Catalina:J2EEApplication=none,J2EEServer=none,j2eeType=WebModule,name=//localhost/host-manager
Catalina:J2EEApplication=none,J2EEServer=none,j2eeType=WebModule,name=//localhost/manager
Catalina:class=org.apache.catalina.UserDatabase,name="UserDatabase",resourcetype=Global,type=Resource
Catalina:context=/,host=localhost,name=StandardContextValve,type=Valve
Catalina:context=/,host=localhost,type=Cache
Catalina:context=/,host=localhost,type=Loader
Catalina:context=/,host=localhost,type=Manager
Catalina:context=/,host=localhost,type=NamingResources
Catalina:context=/,host=localhost,type=WebappClassLoader
Catalina:context=/docs,host=localhost,name=StandardContextValve,type=Valve
Catalina:context=/docs,host=localhost,type=Cache
Catalina:context=/docs,host=localhost,type=Loader
Catalina:context=/docs,host=localhost,type=Manager
Catalina:context=/docs,host=localhost,type=NamingResources
Catalina:context=/docs,host=localhost,type=WebappClassLoader
Catalina:context=/examples,host=localhost,name=FormAuthenticator,type=Valve
Catalina:context=/examples,host=localhost,name=StandardContextValve,type=Valve
Catalina:context=/examples,host=localhost,name=foo/bar/name2,resourcetype=Context,type=Environment
Catalina:context=/examples,host=localhost,name=foo/name1,resourcetype=Context,type=Environment
Catalina:context=/examples,host=localhost,name=foo/name4,resourcetype=Context,type=Environment
Catalina:context=/examples,host=localhost,name=minExemptions,resourcetype=Context,type=Environment
Catalina:context=/examples,host=localhost,name=name3,resourcetype=Context,type=Environment
Catalina:context=/examples,host=localhost,type=Cache
Catalina:context=/examples,host=localhost,type=Loader
Catalina:context=/examples,host=localhost,type=Manager
Catalina:context=/examples,host=localhost,type=NamingResources
Catalina:context=/examples,host=localhost,type=WebappClassLoader
Catalina:context=/host-manager,host=localhost,name=BasicAuthenticator,type=Valve
Catalina:context=/host-manager,host=localhost,name=StandardContextValve,type=Valve
Catalina:context=/host-manager,host=localhost,type=Cache
Catalina:context=/host-manager,host=localhost,type=Loader
Catalina:context=/host-manager,host=localhost,type=Manager
Catalina:context=/host-manager,host=localhost,type=NamingResources
Catalina:context=/host-manager,host=localhost,type=WebappClassLoader
Catalina:context=/manager,host=localhost,name=BasicAuthenticator,type=Valve
Catalina:context=/manager,host=localhost,name=StandardContextValve,type=Valve
Catalina:context=/manager,host=localhost,type=Cache
Catalina:context=/manager,host=localhost,type=Loader
Catalina:context=/manager,host=localhost,type=Manager
Catalina:context=/manager,host=localhost,type=NamingResources
Catalina:context=/manager,host=localhost,type=WebappClassLoader
Catalina:host=localhost,name=AccessLogValve,type=Valve
Catalina:host=localhost,name=ErrorReportValve,type=Valve
Catalina:host=localhost,name=StandardHostValve,type=Valve
Catalina:host=localhost,type=Deployer
Catalina:host=localhost,type=Host
Catalina:name="ajp-bio-8009",type=GlobalRequestProcessor
Catalina:name="ajp-bio-8009",type=ThreadPool
Catalina:name="http-bio-8080",type=GlobalRequestProcessor
Catalina:name="http-bio-8080",type=ThreadPool
Catalina:name=HttpRequest1,type=RequestProcessor,worker="http-bio-8080"
Catalina:name=HttpRequest2,type=RequestProcessor,worker="http-bio-8080"
Catalina:name=HttpRequest3,type=RequestProcessor,worker="http-bio-8080"
Catalina:name=HttpRequest4,type=RequestProcessor,worker="http-bio-8080"
Catalina:name=HttpRequest5,type=RequestProcessor,worker="http-bio-8080"
Catalina:name=HttpRequest6,type=RequestProcessor,worker="http-bio-8080"
Catalina:name=StandardEngineValve,type=Valve
Catalina:name=common,type=ServerClassLoader
Catalina:port=8009,type=Connector
Catalina:port=8009,type=Mapper
Catalina:port=8009,type=ProtocolHandler
Catalina:port=8080,type=Connector
Catalina:port=8080,type=Mapper
Catalina:port=8080,type=ProtocolHandler
Catalina:realmPath=/realm0,type=Realm
Catalina:realmPath=/realm0/realm0,type=Realm
Catalina:type=Engine
Catalina:type=MBeanFactory
Catalina:type=NamingResources
Catalina:type=Server
Catalina:type=Service
Catalina:type=StringCache
$>

とても沢山のMBeanリストが表示されます。

次に、Catalinaドメインと bean名を指定し、MBeanが供給できる情報を表示させてみます。

$>info -b name="http-bio-8080",type=ThreadPool -d Catalina
#mbean = Catalina:name="http-bio-8080",type=ThreadPool
#class name = org.apache.tomcat.util.modeler.BaseModelMBean
# attributes
  %0   - acceptorThreadCount (int, rw)
  %1   - acceptorThreadPriority (int, rw)
  %2   - algorithm (java.lang.String, rw)
  %3   - allowUnsafeLegacyRenegotiation (java.lang.String, rw)
  %4   - backlog (int, rw)
  %5   - bindOnInit (boolean, rw)
  %6   - ciphers (java.lang.String, rw)
  %7   - ciphersArray ([Ljava.lang.String;, r)
  %8   - clientAuth (java.lang.String, rw)
  %9   - connectionCount (long, r)
  %10  - crlFile (java.lang.String, rw)
  %11  - currentThreadCount (int, r)
  %12  - currentThreadsBusy (int, r)
  %13  - daemon (boolean, rw)
  %14  - deferAccept (boolean, r)
  %15  - keepAliveTimeout (int, rw)
  %16  - keyAlias (java.lang.String, rw)
  %17  - keyPass (java.lang.String, rw)
  %18  - keystoreFile (java.lang.String, rw)
  %19  - keystorePass (java.lang.String, rw)
  %20  - keystoreProvider (java.lang.String, rw)
  %21  - keystoreType (java.lang.String, rw)
  %22  - localPort (int, r)
  %23  - maxConnections (int, rw)
  %24  - maxHeaderCount (int, rw)
  %25  - maxKeepAliveRequests (int, rw)
  %26  - maxThreads (int, rw)
  %27  - minSpareThreads (int, rw)
  %28  - modelerType (java.lang.String, r)
  %29  - name (java.lang.String, rw)
  %30  - paused (boolean, r)
  %31  - port (int, rw)
  %32  - running (boolean, r)
  %33  - sSLEnabled (boolean, rw)
  %34  - sessionCacheSize (java.lang.String, rw)
  %35  - sessionTimeout (java.lang.String, rw)
  %36  - soLinger (int, rw)
  %37  - soTimeout (int, rw)
  %38  - socketProperties (org.apache.tomcat.util.net.SocketProperties, r)
  %39  - sslEnabledProtocols (java.lang.String, w)
  %40  - sslEnabledProtocolsArray ([Ljava.lang.String;, r)
  %41  - sslProtocol (java.lang.String, rw)
  %42  - tcpNoDelay (boolean, rw)
  %43  - threadPriority (int, rw)
  %44  - trustManagerClassName (java.lang.String, rw)
  %45  - trustMaxCertLength (java.lang.String, rw)
  %46  - truststoreAlgorithm (java.lang.String, rw)
  %47  - truststoreFile (java.lang.String, rw)
  %48  - truststorePass (java.lang.String, rw)
  %49  - truststoreProvider (java.lang.String, rw)
  %50  - truststoreType (java.lang.String, rw)
  %51  - useComet (boolean, r)
  %52  - useCometTimeout (boolean, r)
  %53  - usePolling (boolean, r)
  %54  - useSendfile (boolean, r)
# operations
  %0   - java.lang.String adjustRelativePath(java.lang.String param0,java.lang.String param1)
  %1   - void bind()
  %2   - void createExecutor()
  %3   - void destroy()
  %4   - java.lang.Object getAttribute(java.lang.String param0)
  %5   - java.lang.String getProperty(java.lang.String param0)
  %6   - void init()
  %7   - void pause()
  %8   - void resume()
  %9   - boolean setProperty(java.lang.String param0,java.lang.String param1)
  %10  - void shutdownExecutor()
  %11  - void start()
  %12  - void startInternal()
  %13  - void stop()
  %14  - void stopInternal()
  %15  - void unbind()
#there's no notifications
$>

次は、実際にMBeanから値を表示してみます。

$>get -b name="http-bio-8080",type=ThreadPool -d Catalina *
#mbean = Catalina:name="http-bio-8080",type=ThreadPool:
useSendfile = false;

acceptorThreadPriority = 5;

minSpareThreads = 10;

maxThreads = 200;

sSLEnabled = false;

keystorePass = null;

localPort = 8080;

connectionCount = 1;

currentThreadCount = 10;

keepAliveTimeout = 20000;

threadPriority = 5;

keyPass = null;

useComet = false;

soLinger = -1;

sslEnabledProtocolsArray = [  ];

#RuntimeIOException: Runtime IO exception: error unmarshalling return; nested exception is:
        java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.tomcat.util.net.SocketProperties
$>

Catalina の http-bio-8080 の ThreadPool に関する値が表示されました。
ちなみに、最後に「RuntimeIOException」が表示されるのは、jmxtermがセキュリティマネージャ機能を持っていない為らしいです。

Jmxterm は、コマンドラインツールなので、例えばBash Shellなどを使って、MBeanの値を取得する事も可能です。
必要に応じて色々なケースで利用できる可能性があるツールだと思います。

参考

https://wiki.jasig.org/display/UPM32/Monitoring+uPortal+MBeans,+Jmxterm+and+Cacti

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。