常用的JVM参数详解
发布日期:2021-06-29 02:31:22
浏览次数:2
分类:技术文章
本文共 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 (开发人员)们去分析故障。常用参数如下:jstackjstack [-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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月14日 07时02分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
大数据技术生态圈讲解
2019-04-29
Hadoop、Spark、HBase与Redis的适用性见解
2019-04-29
spark概述
2019-04-29
Hadoop、MapReduce、YARN和Spark的区别与联系
2019-04-29
我终于搞清楚了和String有关的那点事儿。
2019-04-29
Kafka入门---概念
2019-04-29
springcloud 第一篇: 服务的注册与发现Eureka(Finchley版本)
2019-04-29
springcloud 第三篇: 服务消费者(Feign)(Finchley版本)
2019-04-29
Java关于JDBC的基本使用
2019-04-29
git配置与使用说明
2019-04-29
python
2019-04-29
网络协议
2019-04-29
进程和线程
2019-04-29
sql面试题
2019-04-29
linux基础与调优
2019-04-29
centos7安装
2019-04-29
hadoop相关介绍
2019-04-29
HTTP协议解析
2019-04-29
数据结构
2019-04-29
软件测试基础
2019-04-29