{"id":1781,"date":"2012-09-23T15:00:00","date_gmt":"2012-09-23T15:00:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/visualvm-monitoring-remote-jvm-over-ssh-jmx-or-not.html"},"modified":"2012-10-22T06:45:58","modified_gmt":"2012-10-22T06:45:58","slug":"visualvm-monitoring-remote-jvm-over-ssh","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html","title":{"rendered":"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not)"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">VisualVM is a great tool for monitoring JVM (5.0+) regarding memory usage, threads, GC, MBeans etc. Let\u2019s see how to use it over SSH to monitor (or even profile, using its sampler) a remote JVM either with JMX or without it. This post is based on Sun JVM 1.6 running on Ubuntu 10 and VisualVM 1.3.3.        <\/p>\n<p><strong>1. Communication: JStatD vs. JMX<\/strong>       <\/p>\n<p>There are two modes of communication between VisualVM and the JVM: Either over the <a href=\"http:\/\/en.wikipedia.org\/wiki\/JMX\">Java Management Extensions<\/a> (JMX) protocol or over <a href=\"http:\/\/docs.oracle.com\/javase\/1.5.0\/docs\/tooldocs\/share\/jstatd.html\">jstatd<\/a>.<br \/>\n<strong><br \/>\n<\/strong><strong>jstatd<\/strong>       <\/p>\n<p>jstatd is a daemon that is distributed with JDK. You start it from the command line (it\u2019s likely necessary to run it as the user running the target JVM or as root) on the target machine and VisualVM will contact it to fetch information about the remote JVMs.<\/p>\n<ul style=\"text-align: left\">\n<li>Advantages: Can connect to a running JVM, no need to start it with special parameters<\/li>\n<li>Disadvantages: Much more limited monitoring capabilities (f.ex. no CPU usage monitoring, not possible to run the Sampler and\/or take thread dumps).<\/li>\n<\/ul>\n<p>Ex.:<\/p>\n<pre class=\"brush:bash\">bash&gt; cat jstatd.all.policy\r\ngrant codebase 'file:${java.home}\/..\/lib\/tools.jar' {\r\npermission java.security.AllPermission;\r\n}\r\nbash&gt; sudo \/path\/to\/JDK\/bin\/jstatd -J-Djava.security.policy=jstatd.all.policy\r\n# You can specify port with -p number and get more info with -J-Djava.rmi.server.logCalls=true<\/pre>\n<p>Note: Replace \u201c${java.home}\/..\/lib\/tools.jar\u201d with the absolute \u201c\/path\/to\/jdk\/lib\/tools.jar\u201d if you have only copied but not installed the JDK.        <\/p>\n<p>If you get the failure<\/p>\n<pre class=\"brush:bash\">Could not create remote object\r\naccess denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)\r\njava.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)\r\nat java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)<\/pre>\n<p>then jstatd likely hasn\u2019t been started with the right java.security.policy file (try to provide fully qualified path to it).        <div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p><a href=\"http:\/\/docs.oracle.com\/javase\/6\/docs\/technotes\/guides\/visualvm\/applications_remote.html\">More info about VisualVM and jstatd<\/a> from Oracle.<br \/>\n<strong><br \/>\n<\/strong><strong>JMX<\/strong>       <\/p>\n<ul>\n<li>Advantages: Using JMX will give you the full power of VisualVM.<\/li>\n<li>Disadvantages: Need to start the JVM with some system properties.<\/li>\n<\/ul>\n<p>You will generally want to use something like the following properties when starting the target JVM (though you could also enable SSL and\/or require username and password):<\/p>\n<pre class=\"brush:bash\">yourJavaCommand... -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1098\r\n<\/pre>\n<p>See <a href=\"http:\/\/docs.oracle.com\/javase\/6\/docs\/technotes\/guides\/visualvm\/jmx_connections.html\">Remote JMX Connections<\/a>.<br \/>\n<strong><br \/>\n<\/strong><strong><u>2. Security: SSH<\/u><\/strong>       <\/p>\n<p>The easiest way to connect to the remote JMX or jstatd over ssh is to use a <a href=\"http:\/\/en.wikipedia.org\/wiki\/SOCKS\">SOCKS proxy<\/a>, which standard ssh clients can set up.<br \/>\n<strong><br \/>\n<\/strong><strong>2.1 Set Up the SSH Tunnel With SOCKS<\/strong>       <\/p>\n<pre class=\"brush:bash\">ssh -v -D 9696 my_server.example.com<\/pre>\n<p><strong>2.2 Configure VisualVM to Use the Proxy<\/strong>       <\/p>\n<p>Tools-&gt;Options-&gt;Network \u2013 Manual Proxy Settings \u2013 check it and configure SOCKS Proxy at localhost and port 9696<br \/>\n<strong><br \/>\n<\/strong><strong>2.3 Connect VisualVM to the Target<\/strong>       <\/p>\n<p>File -&gt; Add Remote Host\u2026 \u2013 type the IP or hostname of the remote machine        <strong>JStatD Connection<\/strong>       <\/p>\n<p>You should see logs both in the ssh window (thanks to its \u201c-v\u201d, f.ex. \u201c<em>debug1: Connection to port 9696 forwarding to socks port 0 requested.<\/em>\u201d and \u201c<em>debug1: channel 3: free: direct-tcpip: listening port 9696 for 10.2.47.71 port 1099, connect from 127.0.0.1 port 61262, nchannels 6<\/em>\u201c) and in the console where you started jstatd (many, f.ex. \u201c<em>FINER: RMI TCP Connection(23)-10.2.47.71: \u2026<\/em>\u201c)        <\/p>\n<p>Wait few minutes after having added the remote host, you should then see the JVMs running there.        <\/p>\n<p>Available stats: JVM arguments, Monitor: Heap, classes, threads monitoring (but not CPU). Sampler and MBeans require JMX.<br \/>\n<strong><br \/>\n<\/strong><strong>JMX<\/strong>       <\/p>\n<p>Right-click on the remote host you have added and select Add JMX Connection \u2026, type the JMX port you have chosen.        <\/p>\n<p>You should see similar logs as with jstatd.        <\/p>\n<p>Available stats: Also CPU usage, system properties, detailed Threads report with access to stack traces, CPU sampling (memory sampling not supported).<br \/>\n<strong><br \/>\n<\/strong><strong>Note: Sampler vs. Profiler<\/strong>       <\/p>\n<p>The VisualVM\u2019s Sampler excludes time spent in Object.wait and Thread.sleep (f.ex. waiting on I\/O). Use the <a href=\"http:\/\/profiler.netbeans.org\/\">NetBeans Profiler<\/a> to profile or sample a remote application if you want to have more control or want the possibility to include Object.wait and Thread.sleep time. It requires its Remote Pack (a java agent, i.e. a JAR file) to be in the target JVM (NetBeans\u2019 Attach Wizard can generate the remote pack for you in step 4, Manual integration, and show you the options to pass to the target JVM to use it).        <\/p>\n<p>You can <a href=\"http:\/\/kirk.blog-city.com\/profiling_on_the_cloud_with_netbeans.htm\">run the profiler over SSH by forwarding its default port<\/a> (5140) and attaching to the forwarded port at localhost.(NetBeans version 7.1.1.)<\/p>\n<p>Don&#8217;t forget to share!<\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/theholyjava.wordpress.com\/2012\/09\/21\/visualvm-monitoring-remote-jvm-over-ssh-jmx-or-not\/\">VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not)<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Jakub Holy at the <a href=\"http:\/\/theholyjava.wordpress.com\/\">The Holy Java<\/a> blog.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>VisualVM is a great tool for monitoring JVM (5.0+) regarding memory usage, threads, GC, MBeans etc. Let\u2019s see how to use it over SSH to monitor (or even profile, using its sampler) a remote JVM either with JMX or without it. This post is based on Sun JVM 1.6 running on Ubuntu 10 and VisualVM &hellip;<\/p>\n","protected":false},"author":16,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[152,207,298,620],"class_list":["post-1781","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-jmx","tag-jvm","tag-monitoring","tag-visualvm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not) - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"VisualVM is a great tool for monitoring JVM (5.0+) regarding memory usage, threads, GC, MBeans etc. Let\u2019s see how to use it over SSH to monitor (or even\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not) - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"VisualVM is a great tool for monitoring JVM (5.0+) regarding memory usage, threads, GC, MBeans etc. Let\u2019s see how to use it over SSH to monitor (or even\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2012-09-23T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-22T06:45:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jakub Holy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/HolyJak\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jakub Holy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html\"},\"author\":{\"name\":\"Jakub Holy\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/7b7d87e493b5f8388635d4315b062727\"},\"headline\":\"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not)\",\"datePublished\":\"2012-09-23T15:00:00+00:00\",\"dateModified\":\"2012-10-22T06:45:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html\"},\"wordCount\":659,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"keywords\":[\"JMX\",\"JVM\",\"Monitoring\",\"VisualVM\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html\",\"name\":\"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not) - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2012-09-23T15:00:00+00:00\",\"dateModified\":\"2012-10-22T06:45:58+00:00\",\"description\":\"VisualVM is a great tool for monitoring JVM (5.0+) regarding memory usage, threads, GC, MBeans etc. Let\u2019s see how to use it over SSH to monitor (or even\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/visualvm-monitoring-remote-jvm-over-ssh.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/7b7d87e493b5f8388635d4315b062727\",\"name\":\"Jakub Holy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7ee9569bd027b442ce03e2cc44cbc8791448ab502e0e2c70cbc6186f64d6e1f5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7ee9569bd027b442ce03e2cc44cbc8791448ab502e0e2c70cbc6186f64d6e1f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7ee9569bd027b442ce03e2cc44cbc8791448ab502e0e2c70cbc6186f64d6e1f5?s=96&d=mm&r=g\",\"caption\":\"Jakub Holy\"},\"description\":\"Jakub is an experienced Java[EE] developer working for a lean &amp; agile consultancy in Norway. He is interested in code quality, developer productivity, testing, and in how to make projects succeed.\",\"sameAs\":[\"http:\\\/\\\/theholyjava.wordpress.com\",\"http:\\\/\\\/www.linkedin.com\\\/in\\\/jakubholydotnet\",\"https:\\\/\\\/x.com\\\/http:\\\/\\\/twitter.com\\\/HolyJak\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Jakub-Holy\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not) - Java Code Geeks","description":"VisualVM is a great tool for monitoring JVM (5.0+) regarding memory usage, threads, GC, MBeans etc. Let\u2019s see how to use it over SSH to monitor (or even","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html","og_locale":"en_US","og_type":"article","og_title":"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not) - Java Code Geeks","og_description":"VisualVM is a great tool for monitoring JVM (5.0+) regarding memory usage, threads, GC, MBeans etc. Let\u2019s see how to use it over SSH to monitor (or even","og_url":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2012-09-23T15:00:00+00:00","article_modified_time":"2012-10-22T06:45:58+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Jakub Holy","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/HolyJak","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Jakub Holy","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html"},"author":{"name":"Jakub Holy","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/7b7d87e493b5f8388635d4315b062727"},"headline":"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not)","datePublished":"2012-09-23T15:00:00+00:00","dateModified":"2012-10-22T06:45:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html"},"wordCount":659,"commentCount":4,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","keywords":["JMX","JVM","Monitoring","VisualVM"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html","url":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html","name":"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not) - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2012-09-23T15:00:00+00:00","dateModified":"2012-10-22T06:45:58+00:00","description":"VisualVM is a great tool for monitoring JVM (5.0+) regarding memory usage, threads, GC, MBeans etc. Let\u2019s see how to use it over SSH to monitor (or even","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/visualvm-monitoring-remote-jvm-over-ssh.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not)"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/7b7d87e493b5f8388635d4315b062727","name":"Jakub Holy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7ee9569bd027b442ce03e2cc44cbc8791448ab502e0e2c70cbc6186f64d6e1f5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7ee9569bd027b442ce03e2cc44cbc8791448ab502e0e2c70cbc6186f64d6e1f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7ee9569bd027b442ce03e2cc44cbc8791448ab502e0e2c70cbc6186f64d6e1f5?s=96&d=mm&r=g","caption":"Jakub Holy"},"description":"Jakub is an experienced Java[EE] developer working for a lean &amp; agile consultancy in Norway. He is interested in code quality, developer productivity, testing, and in how to make projects succeed.","sameAs":["http:\/\/theholyjava.wordpress.com","http:\/\/www.linkedin.com\/in\/jakubholydotnet","https:\/\/x.com\/http:\/\/twitter.com\/HolyJak"],"url":"https:\/\/www.javacodegeeks.com\/author\/Jakub-Holy"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1781","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=1781"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1781\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}