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. <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] 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> 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] 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] 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] 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 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>] unix> bin/resin.sh -conf conf/resin.conf jmx-list -user foo -password test com.acme:* com.acme:type=Foo com.acme:type=Bar
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>]
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 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... 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] 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...] 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 unix> resinctl password-generate mypassword password: {RESIN}bjuNvBjEDN2m6ynQU8SqQA== <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> openssl_password: {RESIN}bjuNvBjEDN2m6ynQU8SqQA==
Generate an admin password with resinctl password-generate [options] name password 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] 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] 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 unix> resinctl restart Resin/4.0.30 restarted -server 'app-0' for watchdog at 127.0.0.1:6600
resinctl scoreboard [options] 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 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 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 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 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 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] unix> resinctl thread-dump -raw Thread Dump: "MailboxWorker[[email protected]]-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> unix> resinctl undeploy undeploy foo Undeployed foo from http://127.0.0.1:8080/hmtp
Start an application with resinctl restart-webapp [options] <name> unix> resinctl webapp-restart myapp 'production/webapp/default/myapp' is restarted
Start an application with resinctl webapp-start [options] <name> unix> resinctl webapp-start myapp 'production/webapp/default/myapp' is started
Stop an application with resinctl webapp-stop [options] <name> unix> resinctl webapp-stop myapp 'production/webapp/default/myapp' is stopped
|