常用的JVM参数详解

常用的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.fi
le=/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 java
root       1567      1 96 10:05 pts/0    00:00:15 /usr/local/java/bin/java -Djava.util.logging.config.fi
le=/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]# ls
    gc-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 -Xms8m
58015 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 <pid>
jstack [-l] <pid> //长列表. 打印关于锁的附加信息
jstack [-F] <pid> //当’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/tomcat
Using CATALINA_HOME:   /data/application/tomcat
Using CATALINA_TMPDIR: /data/application/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /data/application/tomcat/bin/bootstrap.jar:/data/application/tomcat/bin/tomcat-juli.jar
Tomcat 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 start
root       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' tomcat
su -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");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ever Since!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值