-
2021-02-12 22:33:20
问题说明
为了分析和定位一个Java线上系统问题,我们需要查看JVM启动时的一些参数设置,例如:垃圾回收算法、堆大小等等。这些参数可能在启动脚本中明确指明,也可能采用默认值。在系统运行过程中其他人也许动态调整了系统参数。
问题解决
通过jps命令找对对应的进程号
[root@swk-207 ~]# jps -lm |grep xk
17743 /xxx/server/skynet/lib/skynet-cloud-xloader-2.1.0.1007.jar --skynet.action.jagent.file=/xxx/server/skynet/lib/jagent --skynet.action.boot.file=xk-process-1.1.1-SNAPSHOT-with-dependencies.jar --server.port=34969
[root@swk-207 ~]#
通过PS命令获取
[root@swk-207 ~]# ps eww 7364
PID TTY STAT TIME COMMAND
7364 ? Sl 112:12 java -Dloader.path=/xxx/server/skynet/plugin/xk-proc/plugins -Djava.tmp.dir=/xxx/server/skynet/plugin/xk-proc/tmp -Djava.io.tmpdir=/xxx/server/skynet/plugin/xk-proc/tmp -Dfile.encoding=UTF-8 -Dxxx.dir.log=/xxx/server/skynet/plugin/xk-proc/logs -Dskynet.jagent.config.location.uri=http://10.5.3.207:6230/skynet/config/xk-proc&#
更多相关内容 -
java命令启动参数-Xms -Xmx的问题
2018-07-05 11:19:51启动命令如下:java -server -Xms128m -Xmx128m -jar xxxx.jartop命令显示如下: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15332 root 17 0 555m 242m 11m S 0.0 1...启动命令如下:java -server -Xms128m -Xmx128m -jar xxxx.jar
top命令显示如下: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15332 root 17 0 555m 242m 11m S 0.0 12.1 1:46.95 java
疑问:为什么VIRT和RES大于128m呢?难道-Xms -Xmx没起作用?
解答:这两个参数只是限值
Java程序的heap
大小,如果你了解heap
和stack
那么应该知道,一般来说只有运行时动态创建的对象
才存在于heap
中;$ java -X
...
-Xms<size> set initial Java `heap size`
-Xmx<size> set maximum Java `heap size`...
另外,通过
top
命令查看到的资源情况是针对整个Java进程的,JVM在执行你的Java代码时还需要载入整个Java Runtime
,有自己的开销,这些都不包括在-Xms/-Xmx
中
借鉴地址Note that the JVM uses more memory than just the heap. For example Java methods, thread stacks and native handles are allocated in memory separate from the heap, as well as JVM internal data structures.
java 虚拟机设置 Xms Xmx PermSize MaxPermSize
JAVA8中不再有PermSize,替换为MetaspaceSize
-
java启动命令与参数配置
2020-11-02 11:51:391. java启动命令 运行一个java应用程序的语法分两种,分别为: 执行类:java [-options] class [args…] 执行jar文件:java [-options] -jar jarfile [args…] 其中 [-options] 配置 JVM参数,[args…] 配置 Java ...1. java启动命令
运行一个java应用程序的语法分两种,分别为:
- 执行类:java [-options] class [args…]
- 执行jar文件:java [-options] -jar jarfile [args…]
其中 [-options] 配置 JVM参数,[args…] 配置 Java 运行参数
2. 运行时参数
其中args为运行时参数,即main方法中的参数数组args,可以通过修改启动配置进行设置,以idea为例,如图这里设置了3个参数,每个参数之间用空格分隔,如果参数自身带有空格,则需要用引号包裹。
3. JVM参数
标准参数
标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变化而变化。
我们可以通过 -help 命令来检索出所有标准参数。
预定义的标准参数(非-D开头的选项)的个数是有限的,。但是我们还可以自定义设置系统属性,其标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来。我们在设置VM参数时不能随意设置,要么使用-Dargname=argvalue这种形式,要么使用预定义的标准参数,如-javaagent:xxxx,以及-classpath xxxx
其中,参数名可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如,-Dfile.encoding=UTF-8 用于指定文件编码格式;也可以是用户自定义的,例如,-Dmy=user,程序中可以读取该参数值,执行相关逻辑。
虚拟机系统参数中设置的参数键值对(只有-D定义的系统属性是键值对形式),在程序中可以用 System.getProperty(“propertyName”) 获取对应参数值。
/** * VM Args:-Dmy=user * * @author moonspirit * @version 1.0 */ public class VMargs { public static void main(String[] args) { String result = System.getProperty("my"); System.out.println("my: " + result); } }
输出结果:
关于System.getProperty(“propertyName”)可参考另一文章参考文章:https://www.cnblogs.com/ysocean/p/11109018.html
非标准参数(-X以及-XX)
X参数
对应前面讲的标准化参数,这是非标准化参数。表示在将来的JVM版本中可能会发生改变,但是这类以 -X开始的参数变化的比较小。
我们可以通过 Java -X 命令来检索所有-X 参数。
XX参数
这是我们日常开发中接触到最多的参数类型。这也是非标准化参数,相对来说不稳定,随着JVM版本的变化可能会发生变化,主要用于JVM调优和debug。
注意:这种参数是我们后续介绍JVM调优讲解最多的参数。
该参数的书写形式又分为两大类:
①、Boolean类型格式:-XX:[±] 表示启用或者禁用name属性。
例子:-XX:+UseG1GC(表示启用G1垃圾收集器)
②、Key-Value类型格式:-XX:= 表示name的属性值为value。
例子:-XX:MaxGCPauseMillis=500(表示设置GC的最大停顿时间是500ms)
demo
这是一个java程序启动时的启动参数信息,在格式上进行了一下分割
运行配置如下图
有些vm参数是idea在启动时的默认配置这里暂不介绍各参数用法,留待以后归纳
-
java 命令启动和Debug参数
2018-06-05 16:48:39source /tmp/pfinder.sh || : export CATALINA_OPTS="${PFINDER_AGENT:-} ${CATALINA_OPTS}" export DEBUG="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=...curl -s "http://test.pfinder-master.jd.com/access/script" -o /tmp/pfinder.sh ; source /tmp/pfinder.sh || :
export CATALINA_OPTS="${PFINDER_AGENT:-} ${CATALINA_OPTS}"
export DEBUG="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9527"
export JAVA_OPTS="$JAVA_OPTS $DEBUG"/export/servers/jdk1.8.0_20/bin/
-server -Xms128M -Xmx256M -Xss256K
-XX:PermSize=32M
-XX:MaxPermSize=32M
-XX:+UseAdaptiveSizePolicy
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:GCTimeRatio=39
-XX:+HeapDumpOnOutOfMemoryError
-XX:ErrorFile=/export/home/tomcat/logs/loghub.360buy.com/jcollector/hs_err.log
-XX:HeapDumpPath=/export/home/tomcat/logs/loghub.360buy.com/jcollector/heap_dump.hprof
-classpath /export/servers/jcollector/conf:/export/servers/jcollector/lib/*:
-Dapp.name=jcollector
-Dapp.pid=72
-Dapp.repo=/export/servers/jcollector/lib
-Dbasedir=/export/servers/jcollector
com.mycom.log.collect.client.main.Client V3.0.6 2
-----
/export/servers/jdk1.8.0_20/bin/java
-Djava.util.logging.config.file=/export/Instances/kepler-king-worker/server1/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.library.path=/usr/local/lib
-server -Xms1024m -Xmx1024m -XX:MaxPermSize=256m -XX:+UnlockExperimentalVMOptions
-Djava.awt.headless=true
-Dsun.net.client.defaultConnectTimeout=60000
-Dsun.net.client.defaultReadTimeout=60000
-Djmagick.systemclassloader=no
-Dnetworkaddress.cache.ttl=300
-Dsun.net.inetaddr.ttl=300
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/export/Instances/kepler-king-worker/server1/logs
-XX:ErrorFile=/export/Instances/kepler-king-worker/server1/logs/java_error_%p.log
-Djava.endorsed.dirs=/export/servers/tomcat8.0.30/endorsed
-classpath /export/servers/tomcat8.0.30/bin/bootstrap.jar:/export/servers/tomcat8.0.30/bin/tomcat-juli.jar -Dcatalina.base=/export/Instances/kepler-king-worker/server1
-Dcatalina.home=/export/servers/tomcat8.0.30
-Djava.io.tmpdir=/export/Instances/kepler-king-worker/server1/temp
org.apache.catalina.startup.Bootstrap
-config /export/Instances/kepler-king-worker/server1/conf/server.xml #Host 8001 1601端口
start
-
Java自定义启动参数
2019-09-15 11:19:18JAVA_OPTS=" - server -Xms1g -Xmx1g -Dhttp.proxyHost=192.168.1.101 -Dhttp.proxyPort=10111" 获取自定义参数: String 参数值 = System.getProperty("参数名") ; String host = System.getProperty(... -
Java命令行启动设置JVM参数
2021-05-26 17:53:02使用Java命令启动应用的时候适当的配置你的参数能有效提高系统的性能。 Xms:是指程序启动时初始内存大小(此值可以设置成与-Xmx相同,以避免每次GC完成后 JVM 内存重新分配)。 Xmx:指程序运行时最大可用内存... -
Java 命令行运行参数大全
2018-07-26 08:06:51Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOME"bin"java –option 来启动,-option为虚拟机参数,JAVA_HOME为JDK安装路径,通过这些参数可对虚拟机的运行状态... -
java 启动命令 java -jar 如何追加参数
2020-12-08 18:55:24jar包启动 后面覆盖或追加参数 配置端口号 java -jar xxx.jar --server.port=8081 指定环境 java -jar xxx.jar --spring.profiles.active=dev 多个参数 java -jar xxx.jar --server.port=8081 -spring.profiles.... -
idea为java程序添加启动参数
2021-12-27 21:34:09java启动命令可选项顾名思义就是java启动参数,当你不加这个参数时 jvm会选择默认的配置进行启动。Java启动命令可选项(options)大致可分为标准和非标准两种,非标准的可选项不保证在所有平台上都实现,并且未来的... -
java启动jar包设置启动参数
2021-12-30 11:22:43主类: 命令: 结果: -
Java命令详解
2018-07-26 08:08:20Java是通过java虚拟机来装载和执行编译文件(class文件)的,java虚拟机通过命令java option 来启动,-option为虚拟机参数,通过这些参数可对虚拟机的运行状态进行调整. -
Maven打包和Linux下java命令启动
2019-11-06 14:17:32项目如果是多模块的,在mvn install后,记得cd 到你需要打包的那个目录后再运行打包命令,-P是参数,test是我的测试环境,根据你的实际环境名进行改变,一般dev开发环境,prod为生产环境。 mvn clean mvn install ... -
java命令cp参数
2018-12-05 10:47:35从java1.6开始,cp参数支持通配符匹配jar文件。需要注意两点: 1、用引号" 2、用*,而不是*.jar Windows: java -cp "Test.jar;lib/*" my.package.MainClass Linux: java -cp "... -
java启动exe程序,传递参数和获取参数
2018-11-01 14:20:191、java中启动exe程序 ,并添加传参 String[] cmd = {"hh.exe","12315"}; Process process = null; try { ProcessBuilder pb = new ProcessBuilder(); pb.command(cmd); ... -
Java启动参数(-, -X, -XX参数)详解
2020-08-12 15:14:15Java启动参数分类 一、JVM标准参数(-) 获取方法:java -help 二、JVM非标准参数(-X) 获取方法:java -X 三、JVM非Stable参数(-XX) 获取方法:java -XX:+PrintFlagsInitial JDK8的-XX参数整理 JDK8 获取所有-... -
Java启动参数、调优及分析
2019-05-29 10:40:51java启动参数共分为三类; 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;... -
java命令启动spring jar包,指定编码
2019-06-28 12:28:50java -Dfile.encoding=utf-8 -jar xxx.jar -
java生产环境调优(1) 认识java 的启动参数
2019-04-06 00:08:59java启动的命令后面的参数一共可以分为3种 1.标准参数 2.x参数 3.xx参数 以x参数距离 输入命令 java -version 可以看到是混合模式 如果是 java -Xcomp -version 这个时候就是编译模式了 xx参数比较的多,功能也... -
java命令启动jar包
2016-12-19 16:53:00本人对这些命令也是一知半解,记录备用。 1. 使用java命令行执行java文件 # 设置命令窗口标题 title test1 # 开启输出 @echo on # 设置环境变量JAVA_HOME set JAVA_HOME=C:\Program Files\Java\jdk... -
java命令行启动main方法项目虚拟机参数设置及main方法参数设置
2018-05-11 21:15:14使用java命令,直接启动main方法类,假设类名为Main.java,则命令为: java Main 如果main方法需要接受一些启动参数,则命令为: java Main [param1] [param2] [param2]... main方法启动时还有可能需要配置... -
java -jar 启动参数
2018-07-23 17:19:161.-Dspring.profiles.active=dev 这个可以在spring-boot启动中指定系统变量,多环境(测试、预发、线上配置)的区分...这两个参数用于设置虚拟机使用何种运行模式,client模式启动比较快,但运行时性能和内存管理效率... -
Java 虚拟机宕机时打印dump,通过命令启动加的参数
2019-12-20 21:53:35-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/dump.bin -XX:+PrintGCDetails -XX:ErrorFile=/data/logs/dump-error.log -
在Java程序中打印java运行时参数
2020-12-10 09:42:04在Java程序中打印java运行时参数 本文是基于CentOS 7.3系统环境,进行java的学习和使用 CentOS 7.3 1. java运行时参数 Java程序在运行时,主要分为两大类参数,一类是JVM参数,一类是Java程序main函数的输入参数 ... -
java启动参数详解
2018-09-04 15:12:20java–jvm启动的参数 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容; ... -
java jar 命令行参数
2021-02-12 21:53:46java jar 命令行参数Java 运行时环境在下面三个位置集中查找启动类和使用到的其它类:自举类路径、安装方式扩展和用户类路径。那么java命令行参数有哪些?下面yjbys小编为大家分享如下:一、运行class文件执行带main... -
2021新版idea为java程序添加启动参数
2021-06-25 15:35:051.找到edit Configuration 2.新建Application项目 3.勾选Add VM options VM option中写启动的环境变量 main class 写项目的启动类 别的空按需填写即可 -
java main方法中的命令行参数
2021-02-25 19:01:47满意答案xiaozhuwlc推荐于 2017.09.29采纳率:50%等级:12已...java YourClassName 参数1 [参数2 参数3 ....]参数之间用一个空格作为间隔符.String[] args 这个字符串数组是保存运行main函数时输入的参数的,例如ma... -
如何修改jvm启动参数
2021-02-28 12:02:13用java命令查看。用java -option进行修改参数。还有tomcat,eclipse启动时通过配置文件加载的。详细如下:安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),... -
请问该如何设置Java虚拟机JVM启动内存参数?
2021-02-27 21:50:22jps(JVM Process Status Tool):JVM机进程状况工具用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java... -
Java执行cmd命令传递带空格的参数
2019-01-15 09:16:53项目中碰到在linux系统中执行cmd命令,由于参数中带有空格,导致命令不能正确执行。一开始以为是'<'和‘“’需要转义,但是转义过后依然不能正确执行,后来发现发生命令执行错误的原因是因为参数中自带空格,导致...