env
localhost: MacOS11.6
remote server: run a centos7 server in vmware
use MacOS monitoring remote server, remote server open a port to show server`s heap
First, init localhost
install visualVM and jdk in Mac
jdk version is 17.0.1, just install dmg, the package name like this: jdk-17_macos-x64_bin.dmg
visualVM version just install dmg again, like this VisualVM_211.dmg:
reference documentation
visualvm: https://visualvm.github.io/download.html
jdk: https://docs.oracle.com/en/java/javase/15/install/installation-jdk-macos.html#GUID-F575EB4A-70D3-4AB4-A20E-DBE95171AB5F
Second, init the remote server
install logstash for rpm:
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.16.2-x86_64.rpm && rpm -ivh logstash-7.16.2-x86_64.rpm
set JAVA_HOME:
sudo vim /etc/profile
export JAVA_HOME=/usr/share/logstash/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
source /etc/profile
java -version
run logstash in the remote server
systemctl start logstash
run jstatd in the remote server
# add two lines in java.policy
cp /usr/share/logstash/jdk/conf/security/java.policy ~/java.policy
cat >> ~/java.policy <<EOF
//
// This system policy file grants a set of default permissions to all domains
// and can be configured to grant additional permissions to modules and other
// code sources. The code source URL scheme for modules linked into a
// run-time image is "jrt".
//
// For example, to grant permission to read the "foo" property to the module
// "com.greetings", the grant entry is:
//
// grant codeBase "jrt:/com.greetings" {
// permission java.util.PropertyPermission "foo", "read";
// };
//
// default permissions granted to all domains
grant {
// allows anyone to listen on dynamic ports
permission java.net.SocketPermission "localhost:0", "listen";
// "standard" properies that can be read by anyone
permission java.util.PropertyPermission "java.version", "read";
permission java.util.PropertyPermission "java.vendor", "read";
permission java.util.PropertyPermission "java.vendor.url", "read";
permission java.util.PropertyPermission "java.class.version", "read";
permission java.util.PropertyPermission "os.name", "read";
permission java.util.PropertyPermission "os.version", "read";
permission java.util.PropertyPermission "os.arch", "read";
permission java.util.PropertyPermission "file.separator", "read";
permission java.util.PropertyPermission "path.separator", "read";
permission java.util.PropertyPermission "line.separator", "read";
permission java.util.PropertyPermission
"java.specification.version", "read";
permission java.util.PropertyPermission "java.specification.vendor", "read";
permission java.util.PropertyPermission "java.specification.name", "read";
permission java.util.PropertyPermission
"java.vm.specification.version", "read";
permission java.util.PropertyPermission
"java.vm.specification.vendor", "read";
permission java.util.PropertyPermission
"java.vm.specification.name", "read";
permission java.util.PropertyPermission "java.vm.version", "read";
permission java.util.PropertyPermission "java.vm.vendor", "read";
permission java.util.PropertyPermission "java.vm.name", "read";
### add this line!!!
permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.vm.annotation","read";
### add this line!!!
permission java.security.AllPermission;
};
EOF
# run in command, must be Absolute path
jstatd -J-Djava.security.policy=java.policy
open visualVM in Mac
create remote server in visualVM, just enter the remote ip
and then, you will see
a bug
no cpu monitoring…