Java排查问题随笔

  常言道:“好记性不如烂笔头”,确实很有道理。在日常工作中,偶尔处理下线上问题还是很常见的,经常出现的情况就是忘记一些常用命令(套路)的用法了,因此整理下来非常用必要,以便关键时刻可以节省到处搜索的时间。

常用Linux命令

  1. top命令,直观查看机器资源使用情况。

(1)top -Hp PID 查看指定进程具体线程、内存使用情况
(2)输入top后,按P以CPU 占用率大小的顺序排列进程列表
(3)输入top后,按M以内存占用率大小的顺序排列进程列表

 

  2. free命令,这个命令估计大家也肯定经常用, 但是命令结果每行每列具体含义,经常容易忘记。

 

1)先看第一行   
       total used free shared buffers cached
Mem:          7804       7643        161        153        333       2658
机器总的总内存(total)为7804MB、其中使用了(used)7643MB、还剩下(free)161MB未使用,这几个指标应该是最好理解的。
另外某部分内存是可以共享的,比如程序代码片段可以被多个进程共享,这部分就是shared指标的含义了,也就是说有153MB内存被用于做共享内存了。
重点说下buffers和cached两个指标,这2个指标所占用的内存都是Linux为了提高访问性能而用来做高速缓存的,查了下资料有说cache是用于文件系统缓存,buffer是用于块设备缓存,还有的书籍说内核2.2以后cache和buffer整合成了一个"通用数据块层",想要深究只能自行查询更官方的文档了。简而言之,这部分内存是Linux内核自行维护的,不需要我们关心,正因为有了这些高速缓存,linux才不需要频繁IO操作,性能才得以提高。

2)第二行

  -/+ buffers/cache:       4651       3153

  这行的含义经常容易搞混。其实它想表达的是如果系统禁用buffer和cache高速缓存,那么系统实际就只使用了4651MB内存,还剩余3153MB内存。换个说法,就是第一行的

used = 实际使用的内存 + buggers/cache的内存, 而第一行的free= total - used。

 3)第三行

  Swap:        30517        231      30286

  这行的数据表示交换空间的总量、使用量、和剩余量。由于交换空间是在内存不足的情况下,使用磁盘当内存用,所以这行如果出现了使用量比较多的情况,那就真的事内存不够,要好好检查下是不是有什么内存泄漏了。

 

 4)总结下

  实际上判断内存使用情况,直接看第二行就行了,这行是系统程序实际使用的内存情况,而对于buffer和cache完全是由内核去控制的,应该是不建议我们去干预的。另外如果第三行数据有异常,就该认真排查了。

 

查看JVM堆栈命令

  1. jmap 

1)jmap -dump:file=hprof-jvm.bin -F PID 转存jvm堆栈信息文件
获取到堆栈信息的二进制文件后,可以使用Eclipse的MAT去分析是否存在异常情况,MAT这个东西确实好用,而且能帮我们自动分析去一些异常,比如内存泄漏什么的。附上下载地址 http://www.eclipse.org/mat/。

2)jmap -histo PID
获取每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数(-histo:live )加上后,只统计活的对象数量.

  

  2.jstack -l PID >> jstack.data。打印活动线程信息

 

查看GC日志

  目前接触项目都是CMS比较多(不知道是不是我们公司比较土~~),GC日志打印内容非常多,第一次看的话确实是懵。了解 CMS 垃圾回收日志,里面有比较清晰说明。这里我只摘录查阅资料后几点个作为笔记。

1)我们的CMS full gc时,经常会看到如下信息:CMS: abort preclean due to time, 这个问题有篇文章讲的很透彻:https://blogs.oracle.com/jonthecollector/entry/did_you_know。主要的意思是:preclean是为了加速下一级的remark过程,因为remark过程是STW的。preclean过程中为了更好的使用parallel,它会等待一次小gc(默认等待5s),如果5s内小gc没来,就会强制开始STW remark过程,并打印信息abort preclean due to time。就是说,出现这个log实际上关系不大,除非我们发现remark过程耗时过久。

2)
13901.282: [GC 13901.283: [ParNew: 8766574K->400883K(9216000K), 1.9300940 secs] 10239467K->1917256K(11578944K), 1.9309390 secs] [Times: user=13.68 sys=0.07, real=1.93 secs]
这段ParNew GC日志最后有三个时间
[Times: user=13.68 sys=0.07, real=1.93 secs]含义是指user是用户态花费的时间,sys是内核态花费的时间,而real是实际花费的时间,user+sys是CPU时间,每个CPU core单独计算,所以这个时间可能会是real的好几倍。

 

参考链接

  linux top命令中的cache & buffers

  Linux Top 命令解析 比较详细

  关于CMS: abort preclean due to time

  通过 jstack 与 jmap 分析一次线上故障

    了解 CMS 垃圾回收日志

  

 

转载于:https://www.cnblogs.com/yipaihushuo/p/9901704.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习(55):定义一个抽象类的继承

不同的是定义一个抽象类先 //抽象类 public abstract class interface4 { public abstract void fly(); public abstract void eat(); } //定义老鹰类继承 /定义一个老鹰类 public class interface3 extends interface4{ public void fly(){ System.out.println(“我是老鹰&…

可持久化线段树学习笔记

可持久化线段树,即主席树。 每次修改的时候不修改原来的节点,暴力建新节点,充分运用了函数式编程的思想。 模板题:给定一个数列,\(m\) 次询问求区间 \([l,r]\) 内的第 \(k\) 大。 利用前缀和思想: #include…

wordpress functions.php 在哪,在functions.php中定义变量并在WordPress中的函数钩子中访问它们...

我想更详细地了解Wordpress结构.正如我所知,使用全局关键字并不是一个好主意.这是我想要完成的:Inside functions.php$affID 12334; //defining a variableadd_shortcode(affiliate_link, function() {$newLink https://example.com?id . $affID;return $newLink…

java学习(56):接口之间的继承续

//定义一个接口,里面放置多个方法 public interface CountManagement { double count(double n,double m,char tag); double count(double up,double down,double h); double eqAax(double num1,double num2); } //定义一个接口,里面需要实现多个方法 pu…

[UE4]单机游戏改网络游戏,不完全清单

把Actor的复制打开中腰数据的复制打开,且只在服务器修改(比如角色属性血量)需要同步的Actor,不在客户端Spawn客户端的操作,先报告到服务器,服务器再广播到所有客户端某些逻辑只在服务器运行(比如…

java学习(57):内部类

/** 2 * 1.内部类可以直接访问外部类的成员,包括私有 3 * 2.外部类要访问内部类的成员必须创建对象 4 * author jjz 5 * 6 */ public class outer { //外部定义的方法 public void play(){ System.out.println(“我喜欢打篮球”); } public static void main(String…

php对接ai图片处理,php – 使用imagick将.psd和.ai转换为PNG / JPG

我解决了它,并将与世界分享!它会将.ai,.psd,.jpg,.png,.gif转换为缩略图.这是一个需要4个参数的函数:$dir – 要保存的目录.$tmpName – 命名不包括扩展名的文件的名称.$fileType – 自解释.$size – 大或小.function thumbGenerator($dir,$tmpName,$fil…

python初识

1.python的简介   python是一门解释型,弱类型 高级开发编程语言. 2.python安装 (1)python3.x  https://www.python.org/downloads/ (2)pycharm  https://www.jetbrains.com/pycharm/ 3、编写第一个python程序 符号:英文 编码方式:“utf-8…

java学习(58):私有内部类后访问

私有化外部方法访问 public class outer { //外部定义的方法 private class student { public void play() { System.out.println(“只有学生才会喜欢打篮球”); } } public void teacher() { student stu new student(); stu.play(); } public static void main(String[] arg…

java学习(59):static修饰内部类

class Outer { private int num 10; private static int num2 100; //内部类用静态修饰是因为内部类可以看出是外部类的成员public static class Inner {public void show() {//System.out.println(num);System.out.println(num2);}public static void show2() {//System.out…

Python_自定义关键字的使用

1.在Python中新建一个套件MOSAPP(一般为APP名称):New Suite→Directory 2.在套件下新建个资源文件My:New Resource:My 3.在My资源文件库下新建个关键字Mytest:New User KeyWord:Mytest 4.在01smoke下新建一…

php http请求xml数据,使用php从HTTP POST请求中检索XML

我检查了类似的问题但没有解决我面临的问题.我正在构建一个Web服务,我想从HTTP POST请求中检索XML数据,操纵数据并返回响应.编写脚本时应考虑以下信息:The communication mode is HTTP POST (not SOAP)The content type is text/xml.The POST request will contain …

java学习(60):java最终类(了解)

最终类 使用关键字 final 对类进行修饰. [访问控制符] final class 类名 { 类体} 例如: public final class MyClass{ ... } 说明: final 不能当做父类, 不能被继承,不能有子类 , 只能被实例化对象 . 如果认为封装类中的某些数据(成员变量) 或者 某些方法(成员方法) 不能…

Lesson 028 —— python 模块

Lesson 028 —— python 模块 在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。 为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚…

java 复杂报表,Java报表比较之中国式报表(复杂报表)篇

Java报表工具,首先可以分成两大类:纯Java报表工具,和支持Java的报表工具。支持Java的报表工具我们所说的”支持”Java的报表工具.其实就是非Java的报表工具,但是可以在Java程序中调用.这样的产品很多,总的讲…

java学习(61):适配器

定义一个动物的抽象类 public abstract class Animal { //定义一个抽象类的方法 public abstract void run(); //定义一个抽象类的构造器 public Animal(){ System.out.println(“抽象类的构造器”); } } 定义一个哺乳动物的抽象类 package com.zx; abstract class Mammal ext…

9个图片滑块动画

链接:https://www.html5tricks.com/9-jquery-image-slider.html 实例: 该实例下载链接:https://www.html5tricks.com/jquery-drag-image-slider.html 转载于:https://www.cnblogs.com/wanlibingfeng/p/9915376.html

php 02d,邻苯二甲酸二苯酯(DPhP)

邻苯二甲酸二苯酯(DPhP) CAS:84-62-8 规格:5G 货号:N-11798-5G邻苯二甲酸二苯酯(DPhP) CAS:84-62-8规格:10G 货号:N-11798-10G邻苯二甲酸二苯酯(DPhP)相关物质订购信息型号 …

java学习(62):java抽象类

定义一个抽象的食物方法 package com.zx; //定义一个食物的抽象方法 public abstract class Food { public abstract void taste(); } 定义食物面条 package com.zx; public class Flour extends Food{ public void taste() { System.out.println(“我可以做面条”); } } 定义食…

java学习(63):普通内部类

定义一个普通内部类 package com.zx; public class NotebookComputer01{ //定义一个非私有化的变量 public int num; public class CPU{ //类型 public String number; //运行速度 public long speed; public String counter(int num){ return Integer.toBinaryString(num); } …