![]() | Resin Documentation | home company blog wiki docs app server web server health cloud java ee pro | ![]() |
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. Since the default resin.xml already includes a <resin:AdminAuthenticator> with a <resin:import>, you can just reuse the admin configuration from the /resin-admin page. Example: enabling Resin ManagerService
<resin xmlns="http://caucho.com/ns/resin"
xmlns:resin="urn:java:com.caucho.resin">
...
<cluster id=''>
<resin:AdminAuthenticator>
<user name="admin" password="{SSHA}h5QdSulQyqIgYP7B1J3YfnRSo56kD847"/>
</resin: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 bin/resin.sh [-conf <file>] heap-dump [options] [-raw] Example: producing a heap dump on Resin Open Source unix> bin/resin.sh -conf conf/resin.conf heap-dump -user foo -password test -raw Heap dump is written to `/var/log/resin/heap.hprof'. To view the file on the target machine use jvisualvm --openfile /var/log/resin/heap.hprof
Resin Pro, when heap-dump is given no Example: heap-dump
unix: bin/resin.sh -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 bin/resin.sh [-conf <file>] thread-dump [options] [-raw] Example: producing a thread dump
unix> bin/resin.sh -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
bin/resin.sh [-conf <file>] profile [options] Example: profiling an application unix> bin/resin.sh -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
bin/resin.sh [-conf <file>] log-level [options] \
-all|-finest|-finer|-fine|-config|-info|-warning|-severe|-off \
[-active-time <time-period>] [loggers...]
Example: setting log level
unix> bin/resin.sh -conf conf/resin.conf log-level -user foo -password test -active-time 5s -finer
Log level is set to `FINER', active time 5 seconds: {root}, com.caucho
Command bin/resin.sh [-conf <file>] jmx-list [options] [<pattern>] Example: listing MBeans unix> bin/resin.sh -conf conf/resin.conf jmx-list -user foo -password test com.acme:* com.acme:type=Foo com.acme:type=Bar
Example: listing MBeans with values bin/resin.sh -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 bin/resin.sh [-conf <file>] jmx-dump [options] [-file <file>]
Example: dumping JMX bin/resin.sh -conf conf/resin.conf jmx-dump -user foo -password test
JMX Dump:
java.lang:type=MemoryPool,name=CMS Old Gen {
Name=CMS Old Gen
Type=HEAP
...
Command bin/resin.sh [-conf <file>] jmx-set [options] -pattern <pattern> -attribute <attribute> value Example: setting attribute value
unix> bin/resin.sh -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 bin/resin.sh [-conf <file>] jmx-call [options] -pattern <pattern> -operation <operation> value... Example: invoking method on MBean
unix> bin/resin.sh -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'.
Deploying an application is done with a bin/resin.sh [-conf <file>] deploy [options] <war-file> Example: deploying an application from a hello-world.war archive unix> bin/resin.sh deploy -user admin -password secret /projects/hello-world/hello-world.war Deployed production/webapp/default/hello-world as hello-world.war to http://127.0.0.1:8080/hmtp
Listing deployed applications is done with a bin/resin.sh [-conf <file>] deploy-list [options] Example: deploy-list unix> bin/resin.sh deploy-list -user admin -password secret production/webapp/default/hello-world Copying an application is done with a bin/resin.sh [-conf <file>] deploy-copy [options] Example: deploy-copy unix> bin/resin.sh deploy-copy -user admin -password secret -source hello-world -target foo copied production/webapp/default/hello-world to production/webapp/default/foo
Undeploying an application is done with an bin/resin.sh [-conf <file>] undeploy [options] <name> Example: undeploy unix> bin/resin.sh undeploy -user admin -password secret undeploy foo Undeployed foo from http://127.0.0.1:8080/hmtp
Starting an application is done with an bin/resin.sh [-conf <file>] start-webapp [options] <name> Example: start web application deployed at context '/foo' unix> bin/resin.sh start-webapp -user admin -password secret foo 'production/webapp/default/foo' is started
Stopping an application is done with an bin/resin.sh [-conf <file>] stop-webapp [options] <name> Example: stop web application deployed at context '/foo' unix> bin/resin.sh stop-webapp -user admin -password secret foo 'production/webapp/default/foo' is stopped
Restarting an application is done with an bin/resin.sh [-conf <file>] restart-webapp [options] <name> Example: stop web application deployed at context '/foo' unix> bin/resin.sh restart-webapp -user admin -password secret foo 'production/webapp/default/foo' is restarted
The bin/resin.sh [-conf <file>] pdf-report [options] Example: generate the default watchdog PDF report unix> bin/resin.sh pdf-report -user admin -password secret -watchdog generated /usr/local/resin/log/default-Watchdog-20110801T0251.pdf
The bin/resin.sh [-conf <file>] license-add -license <license file> [options] Example: copy test.license to the license directory as test.license, overwrite if exists unix> bin/resin.sh license-add -user admin -password secret -license test.license -overwrite add-license wrote test.license successfully
|