![]() | 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-2012 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
|