常用指令
- 查看java版本:java -version
此处用的是java 1.8 - 查看所用的垃圾回收器:java -XX:PrintCommandLineFlags -version
第一行最后就是所用的垃圾回收器。此处用的是Parallel Scverage+Parallel Old
其他的如:
-XX:+UserSerialGC = Serial new + Serial old
-XX:+UserParNewGC = ParNew + Serial old
-XX:+UseConcMarkSweepGc = ParNew + CMS + Serial Old(此处serial old是给CMS兜底的)
-XX:+UseG1GC = G1
其他的不常用的就不列举了 - jps:显示当前系统的java进程情况及进程id。也可用ps命令
可以看到有三个java进程 - jinfo:打印出对应的java程序的信息
- jstat -gc 进程号:打印出某java进程的堆信息。是静态的
也可动态输出。jstat -gc 进程号 时间
此处为每隔1000毫秒打印一次堆信息 - top(得到CPU占用最大的进程ID) -> top -Hp 进程号(找到占用CPU最大的线程) -> jstack命令(查看线程对应的线程栈)
注意此处的 -u tomcat 。grep后面的线程ID是16进制的,但是top -Hp 进程号 出来的是10进制的。可用printf “%x\n” 数字 - 图形化的:jvisualVm。 oracle自带的。(生产环境不要用哈,压测的时候可以用)
如上图 - arthas:很牛皮的一个工具。安装和使用可以网上找
GC常用参数
- -Xmn:新生代 , -Xms:最小堆,-Xmx:最大堆,-Xss:栈空间
- -XX:+UseTLAB:是否使用TLAB,默认是打开的(Thread local allocation buffer)。对于每一个线程,jvm都会在Eden区分配一个专属的区域。当专属区域满了后才会和别的线程一起争夺公共区域。
- -XX:+PringTLAB:打印TLAB的使用情况
- -XX:TLABSize:设置TLAB的大小