常用的JVM参数详解
发布日期:2021-06-29 02:31:22 浏览次数:3 分类:技术文章

本文共 5986 字,大约阅读时间需要 19 分钟。

常用的JVM参数

1、配置JAVA虚拟机的空间大小

实际生产环境中, 我们通常将初始化堆(-Xms) 和 最大堆(-Xmx) 设置为一样大。以避免程序频繁的申请堆空间。设置为物理内存的一半.

-Xms:初始堆大小-Xmx:最大堆大小[root@localhost bin]# ps -ef | grep java   //查看java配置参数root       1473      1 74 10:02 pts/0    00:00:09 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start[root@java-tomcat1~]# cd /usr/local/tomcat/bin   //进入JAVA配置文件[root@java-tomcat1 bin]# vim catalina.sh   //添加空间配置文件JAVA_OPTS="$JAVA_OPTS -Xms1024m -Xmx1024m"[root@localhost bin]# bash shutdown.sh   //关闭Tomcat[root@localhost bin]# bash startup.sh    //开启Tomcat[root@localhost bin]# ps -ef | grep javaroot       1567      1 96 10:05 pts/0    00:00:15 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Xms1024m -Xmx1024m - //代表添加完成     Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap startroot       1583   1427  0 10:05 pts/0    00:00:00 grep --color=auto java
2、开启GC日志
跟踪JAVA虚拟机的垃圾回收

GC日志:jvm垃圾回收,记录jvm的运行状态,oom内存溢出的报错信息等。

  • %t 将会被替代为时间字符串,格式为: YYYY-MM-DD_HH-MM-SS

  • 跟上述添加设置JAVA空间步骤一样,在此基础上追加-Xloggc:/data/logs/gc-%t.log[root@java-tomcat1 bin]# vim catalina.sh  添加JAVA_OPTS="$JAVA_OPTS  -Xms1024m -Xmx1024m -Xloggc:/data/logs/gc-%t.log"[root@java-tomcat1 bin]# mkdir -p /data/logs重启tomcat[root@localhost bin]# cd /data/logs/   //查看配置是否完成[root@localhost logs]# lsgc-2021-05-25_11-06-24.log  gc-2021-05-25_11-06-35.log
3、JVM运维实用排障工具
jps工具
用来查看Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程常用参数如下:-v:输出传给jvm的参数注意: 使用jps 时的运行账户要和JVM 虚拟机启动的账户一致。若启动JVM虚拟机是运行的账户为www,那使用jps指令时,也要使用www 用户去指定。 sudo -u www jps案例:#查看已经运行的JVM 进程的实际启动参数[root@java-tomcat1 ~]# jps -v 58154 Jps -Denv.class.path=.:/usr/local/java/lib:/usr/local/java/jre/lib:/usr/local/java/lib/tools.jar -Dapplication.home=/usr/local/java -Xms8m58015 Bootstrap -Djava.util.logging.config.file=/data/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/data/application/tomcat -Dcatalina.home=/data/application/tomcat -Djava.io.tmpdir=/data/application/tomcat/temp
4、jstack
jstack用于打印出给定的java进程ID或远程调试服务的Java堆栈信息。此信息通常在运维的过程中被保存起来(保存故障现场),以供 RD (开发人员)们去分析故障。常用参数如下:jstack 
jstack [-l]
//长列表. 打印关于锁的附加信息jstack [-F]
//当’jstack [-l] pid’没有响应的时候强制打印栈信息案例:打印JVM 的堆栈信息,以供问题排查[root@java-tomcat1 ~]# jstack -F 38360 > /tmp/jstack.log
5、Tomcat的安全优化
1、降权启动(强制)
分类 配置内容说明 标准配置 备注
降权启动 1.tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;2.如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发; 避免一旦tomcat 服务被入侵,黑客直接获取高级用户权限危害整个server的安全;
[root@java-tomcat1 ~]# useradd tomcat [root@java-tomcat1 ~]# chown tomcat.tomcat /usr/local/tomcat/ -R[root@java-tomcat1 ~]# su -c '/usr/local/tomcat/bin/start.sh start' tomcat Using CATALINA_BASE:   /data/application/tomcatUsing CATALINA_HOME:   /data/application/tomcatUsing CATALINA_TMPDIR: /data/application/tomcat/tempUsing JRE_HOME:        /usr/local/javaUsing CLASSPATH:       /data/application/tomcat/bin/bootstrap.jar:/data/application/tomcat/bin/tomcat-juli.jarTomcat started.[root@java-tomcat1 ~]# ps -ef | grep tomcat tomcat     1065      1 64 20:33 ?        00:00:06 /usr/local/java/bin/java -Djava.util.logging.config.file=/data/applicationtomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /data/application/tomcat/bin/bootstrap.jar:/data/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/data/application/tomcat -Dcatalina.home=/data/application/tomcat -Djava.io.tmpdir=/data/application/tomcat/temp org.apache.catalina.startup.Bootstrap startroot       1112   1027  0 20:33 pts/0    00:00:00 grep --color=auto tomcat
6、Tomcat性能优化

1)、优化代码:该项需要开发经验足够丰富,对开发人员要求较高

2)、jvm**优化机制 **垃圾回收机制 把不需要的内存回收

优化jvm--优化垃圾回收策略优化catalina.sh配置文件。在catalina.sh配置文件中添加代码# tomcat分配1G堆内存模板JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m # 重启服务su -c '/home/tomcat/tomcat8_1/bin/shutdown.sh' tomcatsu -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat

3)、加足够大的内存:此方法投入资金比较大

4)、每天0点定时重启tomcat:此方法应用较为广泛

7、设置JVM缓存
在主机名解析为IP地址后,资源IP地址将保存在JVM的高速缓存中。如果改变了资源IP地址,则需要重新启动应用服务器,identity Manager能够检测所做更改(ID-3635)。这是Sun JD(1.3及更高版本)中的设置,可以使用sun.net.inetaddr.ttl属性(通常在jre/lib/security/java.security中设置)控制设置解析成功的域名记录JVM中缓存的有效时间。JVM默认是永久有效,这样一来域名IP重定向必须重启JVM,这里修改为5秒有效,0表示禁止缓存,-1表示永远有效java.security.Security.setProperty("networkaddress.cache.ttl", "5");//设置解析失败的域名记录JVM中缓存的有效时间,JVM默认是10秒,0表示禁止缓存,-1表示永远有效java.security.Security.setProperty("networkaddress.cache.negative.ttl", "2");
8、设置DNS缓存

法一、在JAVA_OPTS里设置

-Dsun.net.inetaddr.ttl=3 -Dsun.net.inetaddr.negative.ttl=1

法二、修改property

System.setProperty("sun.net.inetaddr.ttl", "3");System.setProperty("sun.net.inetaddr.negative.ttl", "1");

转载地址:https://blog.csdn.net/YYYYang864/article/details/117263360 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Ansible自动化运维实战部署1
下一篇:RabbitMQ集群及镜像配置部署详解

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月30日 09时39分39秒