![]() | Resin Documentationapp server |
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.
Start Resin in console mode with resinctl console [options] Example: starting in console
unix> resinctl console
Resin Professional 4.0.s120731 (built Tue, 31 Jul 2012 03:03:37 PDT)
Copyright(c) 1998-2018 Caucho Technology. All rights reserved.
1999999.license -- 1 Resin server Caucho
...
[12-08-03 16:04:42.670] {main}
[12-08-03 16:04:42.670] {main} http listening to *:8080
[12-08-03 16:04:42.671] {main}
[12-08-03 16:04:42.672] {main} Resin[id=app-0] started in 1438ms
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
Copy a deployed application to a new deployment tag with resinctl deploy-copy [options] Example: deploy-copy unix> resinctl deploy-copy --source mysource --target mytarget copied production/webapp/default/mysource to production/webapp/default/mytarget
List deployed applications with resinctl deploy-list [options] Example: deploy-list unix> resinctl deploy-list production/webapp/default/hello-world 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. 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'.
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
Change the logging level temporarily with
resinctl log-level [options] \
-all|-finest|-finer|-fine|-config|-info|-warning|-severe|-off \
[-active-time <time-period>] [names...]
Example: setting log level
unix> resinctl log-level --finer --active-time 5s com.mycom.mypkg
Log level is set to 'FINER', active time 5 seconds: {root}, com.caucho
Encrypt a configuration password with resinctl password-encrypt [options] plaintext The Example: password-encrypt
unix> resinctl password-generate mypassword
password: {RESIN}bjuNvBjEDN2m6ynQU8SqQA==
Example: resin-web.xml with database
<web-app xmlns="http://caucho.com/ns/resin"
xmlns:resin="urn:java:com.caucho.resin">
<database jndi-name='jdbc/test_mysql'>
<driver type="com.mysql.jdbc.Driver">
<url>jdbc:mysql://localhost:3306/test</url>
<user>myuser</user>
<password>
<resin:Password>{RESIN}bjuNvBjEDN2m6ynQU8SqQA==</resin:Password>
</password>
</driver>
</database>
</web-app>
Example: resin.properties openssl_password
openssl_password: {RESIN}bjuNvBjEDN2m6ynQU8SqQA==
Generate an admin password with resinctl password-generate [options] name password Example: password-generate
unix> resinctl password-generate myuser mypassword
admin_user : myuser
admin_password : {SSHA}yAKopu5id740xAoePKZOGyAtu78DpZck
Generate a PDF report for the server with resinctl pdf-report [options] Example: generate the default watchdog PDF report unix> bin/resin.sh pdf-report -user admin -password secret -watchdog generated /usr/local/share/resin/log/default-Watchdog-20110801T0251.pdf
Profile an applications to find bottlenecks and CPU spikes. Resin's
resinctl profile [options] Example: profiling an application unix> resinctl profile 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()
Restart a Resin daemon server with resinctl restart [options] The Example: restart a daemon unix> resinctl restart Resin/4.0.30 restarted -server 'app-0' for watchdog at 127.0.0.1:6600
resinctl scoreboard [options] Example: scoreboard unix> resinctl scoreboard [Port 127.0.0.1:6800 Threads] ____R [Port *:8080 Threads] ____RRRRR [Resin Threads] ww.....w......RwR.Rwwww....w.....wwwww..www [Other Threads] wRww [Scoreboard Key] w WAITING b BLOCKED R RUNNING _ ACCEPT N NATIVE . IDLE
Shutdown all Resin daemon servers and watchdog with resinctl shutdown [options] The Example: shutdown watchdog unix> resinctl shutdown Resin/4.0.30 shutdown watchdog at 127.0.0.1:6600
Start Resin as a daemon with resinctl start [options] The Example: starting as a daemon unix> resinctl start Resin/4.0.30 launching watchdog at 127.0.0.1:6600 Resin/4.0.30 started -server 'app-0' with watchdog at 127.0.0.1:6600 To debug any start problems, see the log directory which contains a watchdog-manager.log and jvm-default.log.
Start Resin servers as a daemon with resinctl start-all [options] The Example: starting as a daemon unix> resinctl start-all Resin/4.0.30 launching watchdog at 127.0.0.1:6600 Resin/4.0.30 started -server 'app-0' with watchdog at 127.0.0.1:6600 To debug any
View the status of Resin daemon server with resinctl status [options] The Example: server status unix> resinctl status Resin/4.0.30 status for watchdog at 127.0.0.1:6600 watchdog: watchdog-pid: 6551 server 'app-0' : ACTIVE password: missing watchdog-user: caucho user: caucho root: /var/resin/ conf: /etc/resin/resin.xml pid: 6598 uptime: 0 days 00h00
Stop a Resin daemon server with resinctl stop [options] The Example: stop a daemon unix> resinctl stop Resin/4.0.30 stopped for watchdog at 127.0.0.1:6600
Dump the JVM's threads with resinctl thread-dump [options] [-raw] Example: producing a thread dump
unix> resinctl thread-dump -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)
...
Undeploy an application with resinctl undeploy [options] <name> Example: undeploy unix> resinctl undeploy undeploy foo Undeployed foo from http://127.0.0.1:8080/hmtp
Start an application with resinctl restart-webapp [options] <name> Example: stop web application deployed at context '/myapp' unix> resinctl webapp-restart myapp 'production/webapp/default/myapp' is restarted
Start an application with resinctl webapp-start [options] <name> Example: start web application deployed at context '/myapp' unix> resinctl webapp-start myapp 'production/webapp/default/myapp' is started
Stop an application with resinctl webapp-stop [options] <name> Example: stop web application '/myapp' unix> resinctl webapp-stop myapp 'production/webapp/default/myapp' is stopped
|