Linux系统监控命令及定位Java线程
1.PID、TID的区分
uid是user id,即用户id,root用户的uid是0,0为最高权限,
gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID、GID:
~$ id bingyue
uid=1000(bingyue) gid=1000(bingyue) groups=1000(bingyue)
~$ id root
uid=0(root) gid=0(root) groups=0(root)
pid是process id,即进程id,可以通过pid找到这个进程的uid,
tid是thead id,可以理解为线程的id。
2.常用的系统监控命令
top查看活动进程信息
top 命令显示当前的活动进程,默认它是按占用CPU 的多少进行排序,每5秒钟刷新一次列表,
你也可以选择不同的排序方式,例如 m 是按内存占用方式进行排序的快捷键。
iostat命令查看磁盘读取情况
iostat 命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况。
要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下。
使用meminfo查看内存信息
meminfo 包含了内存的详细信息,可以使用 cat 和 grep 命令来显示 meminfo 信息:
cat /proc/meminfo
使用free命令动态查看内存信息
可以使用 free 命令来显示动态的内存使用信息,free 查看大概的内存信息,而 meminfo 提供的信息更加详细。
lsof命令查看打开文件和端口等的列表
lsof 命令对于很多 Linux/Unix 系统都可以使用,主要以列表的形式显示打开的文件和进程。
打开的文件主要包括磁盘文件、网络套接字、管道、设备和进程。
使用这个命令的主要原因是一个一个盘不能卸载并且显示文件正在使用或者打开的错误信息。这个命令很容易看出哪些文件正在使用。
使用mpstat查看cpu信息
mpstat mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。
默认可能没有安装,需要安装后使用。
在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
使用pmap查看某进程的内存使用情况
pmap 命令用来报告每个进程占用内存的详细情况,可用来看是否有进程超支了,该命令需要进程 id 作为参数。
pmap pid
使用ps 和 pstree查看进程列表
ps 和 pstree 命令都可以用来列表展示正在运行的所有进程。ps 告诉你每个进程占用的内存和 CPU 处理时间,而 pstree 显示的信息没那么详细,但它以树形结构显示进程之间的依赖关系,包括子进程信息。一旦发现某个进程有问题,你可以使用 kill 来杀掉它。
netstat网络信息
Netstat 和 ps 命令类似,显示了大量跟网络相关的信息,例如 socket 的使用、路由、接口、协议、网络等等。
strace
strace 可以记录进程进行系统调用的详情,因此它也是一个非常好的诊断工具,例如你可以使用它来找出某个程序正在打开某个配置文件。
Strace 在跟踪某个进程时会让该进程的性能变得非常差,因此请谨慎使用。
vmstat
你可以使用 vmstat 来监控虚拟内存,一般 Linux 上的开发者喜欢使用虚拟内存来获得最佳的存储性能。该命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。
uptime
uptime 命令告诉你这台服务器从开机启动到现在已经运行了多长时间了。同时也包含了从启动到现在服务器的平均负载情况
3.常用的监控工具
htop — 进程监控
htop 是一个更加先进的交互式的实时监控工具。htop 与 top 命令非常相似,但是他有一些非常丰富的功能,如用户友好界面管理进程、快捷键、横向和纵向进程等更多的。htop 是一个第三方工具并不包括在 Linux 系统中,你需要使用包管理工具进行安装。
iotop — 监控 Linux 磁盘 I/O
iotop 也是和 top 和 htop 命令相似,但是它会有一个报告功能去监控和显示实时的磁盘 I/O 输入和输出和程序进程。这个工具对于查找精确的高的磁盘读/写过程是非常有用的。
nmon即奈吉尔性能监视器
Nmon是 Nigel's Monitor 的缩写,是一个使用很普遍的开源工具,用来监视 Linux 系统的所有资源包括:CPU、内存、磁盘使用率、网络上的进程、NFS、内核等等,并且提供了一个图形化的工具。
tcpdump — 网络数据包分析器
Tcpdump 是一个简单、可靠的网络监控工具,用来做基本的协议分析,看看那些进程在使用网络以及如何使用网络。
如果需要获取详细的信息,可以使用 Wireshark 。
4.Linux监控常用的操作
netstat -natp : 查看对应的网络链接
lsof -p pid : 查找对应pid的文件句柄
lsof -i : 80 : 查找对应端口被哪个进程占用
lsof /tmp/1.txt :查找对应文件被哪个进程占用
查看所有存在的线程:
ps xH
手册中说:H Show threads as if they were processes
查看一个进程起的线程数:
ps -mp <PID>
手册中说:m Show threads after processes
5.找到最耗CPU的Java线程
首先使用top等命令找到jvm进程的pid,
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3853 weblogic 18 0 9268m 4.1g 10m S 34.4 6.5 1301:04 java
当前jvm进程的pid是3853,通过jstack命令dump出当前的jvm进程的堆栈信息:
jstack 3853 >> /tmp/jstack0330.txt
然后使用下面的命令:
ps -mp pid -o THREAD,tid,time
或者
ps -Lfp pid
这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息:
$ ps -mp 3853 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
weblogic 29.3 - - - - - - 21:40:17
weblogic 10.7 24 - 184467 - - 13979 07:39:06
通过 printf "%x\n" 13979 可以将线程id转化成16进制表示,
继续通过grep命令即可以查到对应16进制的线程id信息:
grep 369b /tmp/jstack0330.txt
堆栈信息中的nid对应的linux操作系统下的tid,就是线程id对应的16进制数字,
tid则是jvm的jmm内存规范中的唯一地址定位。
使用grep -A ,可以显示匹配行和之后的几行,
继续查看线程所在堆栈信息中前后的部分:
grep 369b /tmp/jstack0330.txt -A 10
就可以定位到相关的代码位置。
Linux系统监控命令及定位Java线程的更多相关文章
- Linux系统监控命令及如何定位到Java线程
>>PID.TID的区分 uid是user id,即用户id,root用户的uid是0,0为最高权限,gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID ...
- 总结:常用的Linux系统监控命令
记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了 找到最耗CPU的java线程 ps命令 命令: ps -mp pid -o THREAD,tid,time 或者 ps -Lf ...
- 常用的linux系统监控命令整理
找到最耗CPU的java线程ps命令 命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid 结果展示: 这个命令的作用,主要是可以获取到对应一个进程下的线程的 ...
- 常用的linux系统监控命令
记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了 找到最耗CPU的java线程 ps命令 命令:ps -mp pid -o THREAD,tid,time 或者 ps - ...
- linux 系统监控命令之 top-(转自 Howie的专栏)
top命令经常用来监控linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 本文通过一个运行中的 ...
- Linux记录-linux系统监控命令汇总
命令 功能应用 用法举例 free 查看内存使用情况,包括物理内存和虚拟内存 free -h或free -m vmstat 对系统的整体情况进行统计,包括内核进程.虚拟内存.磁盘.陷阱 ...
- 总结:常用的Linux系统监控命令(2)
判断I/O瓶颈 mpstat命令 命令:mpstat -P ALL 1 1000 结果显示: 注意一下这里面的%iowait列,CPU等待I/O操作所花费的时间.这个值持续很高通常可能是I/O瓶颈所导 ...
- 性能测试三十三:监控之Linux系统监控命令大全
1.top命令top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top - 01:06:48 up 1: ...
- 常用linux系统监控命令
一.内存监控 监控内存的使用状态是非常重要的,通过监控有助于了解内存的使用状态,比如内存占用是否正常,内存是否紧缺等等,监控内存最常使用的命令有free.vmstat.top等 1.1 free $ ...
随机推荐
- 利用iscroll实现上拉加载下拉刷新
1.首先引用isScroll插件 说明:页面加载时初始化isScroll,然后调用pullDownAction()和pullUpAction(),每次切换tab时,只需要对pullDownAction ...
- python3+requests库框架设计02-封装日志类
首先我们先来实现日志的功能,日志可以使用python3自带logging模块,不会的可以百度一下相关文章,也可以看我另外一篇文章Python3学习笔记24-logging模块 在封装日志类前,我们需要 ...
- node ,npm和nvm 版本的管理
node npm :node 的包管理 nvm :node 的版本管理 node -v ---->查看node 的版本 (v---->version) npm -v ----->n ...
- UML建模图
UML 2.0规范 迅速成为建立软件系统可视化.规范.文档的标准.统一建模语言(UML) 也被用于非软件系统的建模,并在很多领域,诸如金融,军事,工程方面应用广泛. UML 2 定义了13种基本的图, ...
- ASP.NET MVC5高级编程 之 视图
1.1理解视图约定 当创建一个项目模版时,可以注意到,项目以一种非常具体的方式包含了一个结构化的Views目录.在每一个控制器的View文件夹中,每一个操作方法都有一个同名的视图文件与其对应.这就提供 ...
- 谓词逻辑 p->q 的真假
若p为假,则q可取真或假,p->q为永真 若p为真,q为假,则p->q为假 若p为真,q为真,则p->q为真 p q p->q 0 0 1 0 1 1 1 0 0 1 1 1 ...
- Confluence 6 管理协同编辑 - 修改你的 Synchrony 配置
你不能通过 Confluence UI 修改 Synchrony 的配置.配置的修改是通过系统属性进行修改的.在绝大部分情况下,你不需要对默认的配置进行修改. 修改 Synchrony 运行的端口. ...
- SWift中 '?' must be followed by a call, member lookup, or subscript 错误解决方案
那是因为你在使用自己写的分类时没有指定返回的数据类型 指定下返回数据类型就好了 我是用的oc写的分类在Swift中使用的 错误代码 private lazy var btn = UIButton.C ...
- vue this触发事件
@click="aHref(index,$event)" aHref: function(url,event){ this.$router.push(url); $(event.c ...
- bat如何提取文本指定行的内容
背景:使用CTS框架运行完测试后,会在logs中生成devices_log和host_log,在results中生成相应的结果(报告).根据报告信息我们可以得知失败的用例,但是却不能知道为什么用例会失 ...