![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
command line resin administration
Starting with version 4.0.17 Resin provides extended set of commands that allow administrators and programmers perform debugging and monitoring tasks on remote Resin server using command line. All Resin users should familiarize themselves with the thread dump, profile, and heap capabilities. By default these commands are disabled. Enabling the command requires ManagerService be registered in resin.xml file. enabling Resin ManagerService
<resin xmlns="http://caucho.com/ns/resin"
xmlns:resin="urn:java:com.caucho.resin"
xmlns:sec="urn:java:com.caucho.security">
...
<cluster id=''>
<sec:AdminAuthenticator password-digest="none">
<sec:user name="admin" password="secret"/>
</sec:AdminAuthenticator>
<resin:RemoteAdminService/>
<resin:ManagerService/>
...
</cluster>
...
</resin>
Since all commands require connecting to Resin server remotely list of required parameters includes authentication and remote connection options such as IP and Port.
To produce a heap dump resin provides
producing a heap dump on Resin Open Source $java -jar lib/resin.jar -conf conf/resin.conf heap-dump -user foo -password test -raw Heap dump is written to `/tmp/hprof-default-2011-04-08-02-51-31.hprof'. To view the file on the target machine use jvisualvm --openfile /tmp/hprof-default-2011-04-08-02-51-31.hprof
Resin Pro, when heap-dump is given no
$java -jar lib/resin.jar -conf conf/resin.conf heap-dump -user foo -password test
Heap Dump generated Fri May 08 02:51:31 PDT 1998
count | self size | child size | class name
68 | 6528 | 3142736 | com.caucho.util.LruCache
28768 | 920576 | 2674000 | java.lang.String
29403 | 2066488 | 2066488 | char[]
68 | 1927360 | 1927360 | com.caucho.util.LruCache$CacheItem[]
7346 | 715416 | 1796320 | java.lang.Object[]
5710 | 594200 | 1768624 | java.util.HashMap$Entry[]
2827 | 135696 | 1606264 | java.util.HashMap
20787 | 665184 | 1489024 | java.util.HashMap$Entry
9682 | 852016 | 1235984 | java.lang.reflect.Method
61507 | 984112 | 984400 | java.lang.Object
337 | 16176 | 889192 | java.util.concurrent.ConcurrentHashMap
2881 | 161336 | 883584 | java.util.LinkedHashMap
1596 | 178752 | 702296 | com.caucho.quercus.program.ProStaticFunction
![]() Note since raw heap dump can be on the order of gigabytes the resulting file
is always left on the machine where Resin server is running. To produce a thread dump resin provides
producing a thread dump $java -jar lib/resin.jar -conf conf/resin.conf thread-dump -user foo -password test -raw
Thread Dump:
"MailboxWorker[manager@resin.caucho]-8" id=31 RUNNABLE
at sun.management.ThreadImpl.getThreadInfo0 (ThreadImpl.java) (native)
at sun.management.ThreadImpl.getThreadInfo (ThreadImpl.java:147)
at com.caucho.util.ThreadDump.threadDumpImpl (ThreadDump.java:88)
at com.caucho.util.ThreadDump.getThreadDump (ThreadDump.java:62)
at com.caucho.server.admin.ManagerActor.doThreadDump (ManagerActor.java:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (NativeMethodAccessorImpl.java) (native)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke (Method.java:597)
at com.caucho.bam.actor.BamSkeleton$QueryMethodInvoker.invoke (BamSkeleton.java:501)
at com.caucho.bam.actor.BamSkeleton.query (BamSkeleton.java:215)
at com.caucho.bam.actor.SkeletonActorFilter.query (SkeletonActorFilter.java:187)
at com.caucho.bam.query.QueryActorFilter.query (QueryActorFilter.java:95)
at com.caucho.bam.packet.Query.dispatch (Query.java:86)
at com.caucho.bam.mailbox.MultiworkerMailbox.dispatch (MultiworkerMailbox.java:268)
at com.caucho.bam.mailbox.MailboxWorker.runTask (MailboxWorker.java:73)
at com.caucho.env.thread.AbstractTaskWorker.run (AbstractTaskWorker.java:160)
at com.caucho.env.thread.ResinThread.runTasks (ResinThread.java:164)
at com.caucho.env.thread.ResinThread.run (ResinThread.java:130)
"Signal Dispatcher" id=5 RUNNABLE
"http://*:8087-1" id=26 RUNNABLE (in native)
at com.caucho.vfs.JniSocketImpl.readNative (JniSocketImpl.java) (native)
at com.caucho.vfs.JniSocketImpl.read (JniSocketImpl.java:337)
at com.caucho.vfs.JniStream.readTimeout (JniStream.java:90)
at com.caucho.vfs.ReadStream.fillWithTimeout (ReadStream.java:1135)
at com.caucho.network.listen.TcpSocketLinkListener.keepaliveThreadRead (TcpSocketLinkListener.java:1345)
at com.caucho.network.listen.TcpSocketLink.processKeepalive (TcpSocketLink.java:767)
at com.caucho.network.listen.DuplexReadTask.doTask (DuplexReadTask.java:91)
at com.caucho.network.listen.TcpSocketLink.handleRequests (TcpSocketLink.java:646)
at com.caucho.network.listen.AcceptTask.doTask (AcceptTask.java:104)
at com.caucho.network.listen.ConnectionReadTask.runThread (ConnectionReadTask.java:98)
at com.caucho.network.listen.ConnectionReadTask.run (ConnectionReadTask.java:81)
at com.caucho.network.listen.AcceptTask.run (AcceptTask.java:67)
at com.caucho.env.thread.ResinThread.runTasks (ResinThread.java:164)
at com.caucho.env.thread.ResinThread.run (ResinThread.java:130)
...
Profiling application can help find bottlenecks. Resin's
profiling an application $java -jar lib/resin.jar -conf conf/resin.conf profile -user foo -password test Profile started at 1998-05-08 02:51:31.001. Active for a total of 5000ms. Sampling rate 10ms. Depth 16. % time |time self(s)| % sum | Method Call 800.000 | 40.080 | 28.407 | com.caucho.env.thread.AbstractTaskWorker.run() 300.000 | 15.030 | 39.060 | com.caucho.env.thread.ResinThread.waitForTask() 200.000 | 10.020 | 46.162 | com.caucho.vfs.JniSocketImpl.nativeAccept() 116.168 | 5.820 | 50.287 | _jsp._test__jsp$1.run() 100.000 | 5.010 | 53.838 | com.caucho.env.thread.AbstractTaskWorker.run() 100.000 | 5.010 | 57.389 | java.lang.ref.ReferenceQueue.remove() 100.000 | 5.010 | 60.940 | com.caucho.server.admin.ManagerActor.profile() 100.000 | 5.010 | 64.491 | java.lang.ref.Reference$ReferenceHandler.run() 100.000 | 5.010 | 68.042 | java.lang.UNIXProcess.waitForProcessExit() 100.000 | 5.010 | 71.593 | java.io.FileInputStream.readBytes() 100.000 | 5.010 | 75.144 | com.caucho.util.Alarm$AlarmThread.run() 100.000 | 5.010 | 78.694 | com.caucho.env.shutdown.ShutdownSystem$ShutdownThread.run() 100.000 | 5.010 | 82.245 | com.caucho.network.listen.JniSelectManager.selectNative() 100.000 | 5.010 | 85.796 | unknown 100.000 | 5.010 | 89.347 | com.caucho.vfs.JniSocketImpl.readNative() 100.000 | 5.010 | 92.898 | com.caucho.test.Test$Timeout.run() 100.000 | 5.010 | 96.449 | com.caucho.profile.ProProfile.nativeProfile() 100.000 | 5.010 | 100.000 | java.lang.Thread.sleep() com.caucho.env.thread.AbstractTaskWorker.run() sun.misc.Unsafe.park() java.util.concurrent.locks.LockSupport.parkUntil() com.caucho.env.thread.AbstractTaskWorker.run() com.caucho.env.thread.ResinThread.runTasks() com.caucho.env.thread.ResinThread.run()
Command
profiling an application $java -jar lib/resin.jar -conf conf/resin.conf log-level -user foo -password test -active-time 5s finer
Log {root}.level is set to `FINER'. Active time 5 seconds.
Command
listing MBeans $java -jar lib/resin.jar -conf conf/resin.conf jmx-list -user foo -password test com.acme:* com.acme:type=Foo com.acme:type=Bar
listing MBeans with values $java -jar lib/resin.jar -conf conf/resin.conf jmx-list -user foo -password test -values com.acme:*
com.acme:type=Foo
attributes:
javax.management.MBeanAttributeInfo[description=, name=Boolean, type=boolean, read-only, descriptor={}]==false
Command
setting attribute value $java -jar lib/resin.jar -conf conf/resin.conf jmx-set -user foo -password test -pattern com.acme:type=Foo -attribute Foo foo-value value for attribute `Foo' on bean `com.acme:type=Foo' is changed from `null' to `foo-value'
Command
invoking method on MBean $java -jar lib/resin.jar -conf conf/resin.conf jmx-call -user foo -password test -pattern com.acme:type=Foo -pattern com.acme:type=Foo -operation echo hello method `echo(java.lang.String)' called on `com.acme:type=Foo' returned `hello'.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||