如何linux监控进程内存的内存使用情况

如何查看进程实际的内存占用情况详解_C 语言
作者:用户
本文讲的是如何查看进程实际的内存占用情况详解_C 语言,
top命令可以查看进程内存的使用,但是不够详细。还有一些命令可以进行更加详细的查看。
[root@localhost ~]# cat /proc/5606/statusName:
switch4State:
S (sleeping)
top命令可以查看进程内存的使用,但是不够详细。还有一些命令可以进行更加详细的查看。
[root@localhost ~]# cat /proc/5606/statusName:
switch4State:
S (sleeping)Tgid:
1TracerPid:
0Utrace: 0FDSize: 32Groups: 0 1 2 3 4 6 10VmPeak:
85328 kBVmSize:
84308 kB——进程占用的虚拟内存大小。VmLck:
0 kBVmHWM:
46368 kBVmRSS:
46360 kB——占用的物理内存。VmData:
76512 kB——data段内存大小(BSS,data)VmStk:
88 kB——栈大小。VmExe:
312 kB——代码段大小。VmLib:
6868 kB——库大小VmPTE:
148 kBVmSwap:
0 kBThreads:
1/31237SigPnd: 0000ShdPnd: 0000SigBlk: 0000SigIgn: 0005SigCgt: 5202CapInh: 0000CapPrm: ffffffffffffffffCapEff: ffffffffffffffffCapBnd: ffffffffffffffffCpus_allowed:
ffCpus_allowed_list:
0-7Mems_allowed:
1Mems_allowed_list:
0voluntary_ctxt_switches:
nonvoluntary_ctxt_switches:
[root@localhost ~]# cat /proc/5627/smaps12000 r-xp :02 652817
/home/mic_lib_-03-16-32/libdb.soSize:
1 kBShared_Clean:
8 kBShared_Dirty:
0 kBPrivate_Clean:
0 kBPrivate_Dirty:
0 kBReferenced:
0 kBKernelPageSize:
4 kBMMUPageSize:
4 kB13000 rw-p :02 652817
/home/mic_lib_-03-16-32/libdb.soSize:
4 kBShared_Clean:
0 kBShared_Dirty:
0 kBPrivate_Clean:
0 kBPrivate_Dirty:
4 kBReferenced:
0 kBKernelPageSize:
4 kBMMUPageSize:
4 kBa2000 r-xp :02 1044485
/home/execute_-03-16-32/mrfcSize:
360 kB——虚拟内存Rss:
156 kB——物理内存Pss:
156 kBShared_Clean:
0 kB——共享部分,动态链接库Shared_Dirty:
0 kBPrivate_Clean:
156 kB——私有部分。Private_Dirty:
0 kBReferenced:
156 kBSwap:
0 kBKernelPageSize:
4 kBMMUPageSize:
4 kB09f00 rw-p :00 0
[heap]——堆的内存Size:
272 kBRss:
184 kBPss:
184 kBShared_Clean:
0 kBShared_Dirty:
0 kBPrivate_Clean:
0 kBPrivate_Dirty:
184 kBReferenced:
184 kBSwap:
0 kBKernelPageSize:
4 kBMMUPageSize:
4 kBb6cfc000-b6cfd000 ---p :00 0Size:
0 kBShared_Clean:
0 kBShared_Dirty:
0 kBPrivate_Clean:
0 kBPrivate_Dirty:
0 kBReferenced:
0 kBKernelPageSize:
4 kBMMUPageSize:
4 kBb6cfd000-b7703000 rw-p :00 0Size:
10264 kBRss:
28 kBShared_Clean:
0 kBShared_Dirty:
0 kBPrivate_Clean:
0 kBPrivate_Dirty:
28 kBReferenced:
28 kBSwap:
0 kBKernelPageSize:
4 kBMMUPageSize:
4 kBb16000 rw-p :00 0Size:
8 kBShared_Clean:
0 kBShared_Dirty:
0 kBPrivate_Clean:
0 kBPrivate_Dirty:
8 kBReferenced:
0 kBKernelPageSize:
4 kBMMUPageSize:
4 kBbfed4000-bfee9000 rw-p :00 0
[stack]——栈的内存。Size:
44 kBShared_Clean:
0 kBShared_Dirty:
0 kBPrivate_Clean:
0 kBPrivate_Dirty:
44 kBReferenced:
44 kBSwap:
0 kBKernelPageSize:
4 kBMMUPageSize:
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索进程
实际内存占用
易语言取进程内存占用、易语言进程占用文件、linux进程内存占用、查看进程占用内存、aix 查看进程占用内存,以便于您获取更多的相关知识。
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供
云栖社区()为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!博客访问: 2163301
博文数量: 746
博客积分: 14546
博客等级: 上将
技术积分: 6788
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
top查看单个进程的内存使用量top -p pidTOP排序用法top [-] [d delay] [q] [c] [s] [S]d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那幺top将以尽可能高的优先级运行。S 指定累计模式。s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。i 使top不显示任何闲置或者僵死进程。c 显示整个命令行而不只是显示命令名top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。显示的各项目为:uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。processes自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休眠的,停止的等很多种类。进程和状态显示可以通过交互命令t来实现。CPU states显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户 和系统的时间中,所以总的百分比将大于100%。Mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。Swap 交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。PID 每个进程的ID。PPID 每个进程的父进程ID。UID 每个进程所有者的UID 。USER 每个进程所有者的用户名。PRI 每个进程的优先级别。NI 该进程的优先级值。SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。DSIZE 数据和堆栈的大小。TRS 文本驻留大小。D 被标记为“不干净”的页项目。LIB 使用的库页的大小。对于ELF进程没有作用。RSS 该进程占用的物理内存的总数量,单位是KB。SHARE 该进程使用共享内存的数量。STAT 该进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态。TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那幺该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。%CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。%MEM 该进程占用的物理内存占总内存的百分比。COMMAND 该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行。下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。&空格&; 立即刷新显示。Ctrl+L 擦除并且重写屏幕。h或者? 显示帮助画面,给出一些简短的命令总结说明。k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什幺样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。i 忽略闲置和僵死进程。这是一个开关式命令。q 退出程序。r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。S 切换到累计模式。s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。f或者F 从当前显示中添加或者删除项目。o或者O 改变显示项目的顺序。l 切换显示平均负载和启动时间信息。m 切换显示内存信息。t 切换显示进程和CPU状态信息。c 切换显示命令名称和完整命令行。M 根据驻留内存大小进行排序。P 根据CPU使用百分比大小进行排序。T 根据时间/累计时间进行排序。W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。从上面的介绍中可以看到,top命令是一个功能十分强大的监控系统的工具,尤其对于系统管理员而言更是如此。一般的用户可能会觉得ps命令其实就够用了,但是top命令的强劲功能确实提供了不少方便。下面来看看实际使用的情况。
阅读(19938) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。您所在的位置: &
你值得拥有:25个Linux性能监控工具
你值得拥有:25个Linux性能监控工具
译者:andyxue
在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接,大致将其划分为两类,基于命令行的和提供图形化接口的。
一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具。在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接,大致将其划分为两类,基于命令行的和提供图形化接口的。
一、基于命令行的性能监控工具
1.dstat - 多类型资源统计工具
该命令整合了vmstat,iostat和ifstat三种命令。同时增加了新的特性和功能可以让你能及时看到各种的资源使用情况,从而能够使你对比和整合不同的资源使用情况。通过不同颜色和区块布局的界面帮助你能够更加清晰容易的获取信息。它也支持将信息数据导出到cvs格式文件中,从而用其他应用程序打开,或者导入到数据库中。你可以用该命令来。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M00/57/2C/wKiom1STlK2RHifPAACUKLidNls959.jpg" />
2.atop - 相比top更好的ASCII码体验
这个使用ASCII码显示方式的命令行工具是一个显示所有进程活动的性能监控工具。它可以展示每日的系统日志以进行长期的进程活动分析,并高亮显示过载的系统使用资源。它包含了CPU,内存,交换空间,磁盘和网络层的度量指标。所有这些功能只需在终端运行atop即可。
当然你也可以使用数据并进行排序。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M01/57/2A/wKioL1STlVDBEhbeAACtyIf8ZHc572.jpg" />
3.Nmon - 类Unix系统的性能监控
Nmon是Nigel's Monitor缩写,它最早开发用来作为AIX的系统监控工具。如果使用在线模式,可以使用光标键在屏幕上操作实时显示在终端上的监控信息。使用捕捉模式能够将数据保存为CSV格式,方便进一步的处理和图形化展示。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M02/57/2D/wKiom1STlK2A8zCNAADNyWovsJ8257.jpg" />
更多的信息参考我们的。
4.slabtop - 显示内核slab缓存信息
这个应用能够显示缓存分配器是如何管理Linux内核中缓存的不同类型的对象。这个命令类似于top命令,区别是它的重点是实时显示内核slab缓存信息。它能够显示按照不同排序条件来排序显示缓存列表。它同时也能够显示一个slab层信息的统计信息的题头。举例如下:
# slabtop --sort=a# slabtop -s b# slabtop -s c# slabtop -s l# slabtop -s v# slabtop -s n# slabtop -s o
更多信息参阅。
5.sar - 性能监控和瓶颈检查
sar 命令可以将操作系统上所选的累积活动计数器内容信息输出到标准输出上。其基于计数值和时间间隔参数的审计系统,会按照指定的时间间隔输出指定次数的监控信息。如果时间间隔参数为设置为0,那么。有用的命令如下:
# sar -u 2 3# sar -u -f /var/log/sa/sa05# sar -P ALL 1 1# sar -r 1 3# sar -W 1 3
6.Saidar - 简单的统计监控工具
Saidar是一个简单且轻量的系统信息监控工具。虽然它无法提供大多性能报表,但是它能够通过一个简单明了的方式显示最有用的系统运行状况数据。你可以很容易地看到统计信息。
Usage: saidar [-d delay] [-c] [-v] [-h]&-d 设置更新时间(秒)-c 彩色显示-v 显示版本号-h 显示本帮助
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M01/57/2D/wKiom1STlK7jYggtAACfzwaPRpg181.jpg" />
7.top - 经典的Linux任务管理工具
作为一个广为人知的Linux工具,top是大多数的类Unix操作系统任务管理器。它可以显示当前正在运行的进程的列表,用户可以按照不同的条件对该列表进行排序。它主要显示了系统进程对CPU和内存的使用状况。top可以快速检查是哪个或哪几个进程挂起了你的系统。你可以在看到top使用的例子。 你可以在终端输入top来运行它并进入到交互模式:
交互模式的一些快捷操作:&
全局命令: &回车/空格& ?, =, A, B, d, G, h, I, k, q, r, s, W, Z
统计区的命令: l, m, t, 1
任务区的命令:
外观: b, x, y, z 内容: c, f, H, o, S, u 大小: #, i, n 排序: &, &, F, O, R
色彩方案: &Ret&, a, B, b, H, M, q, S, T, w, z, 0 - 7
-, _, =, +, A, a, G, g, w
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M00/57/2A/wKioL1STlVGShVpFAAEKl9wTtI0503.jpg" />
8.Sysdig - 系统进程的高级视图
Sysdig是一个能够让系统管理员和开发人员以前所未有方式洞察其系统行为的监控工具。其开发团队希望改善系统级的监控方式,通过提供关于存储,进程,网络和内存子系统的统一有序以及粒度可见的方式来进行错误排查,并可以创建系统活动记录文件以便你可以在任何时间轻松分析。
# sysdig proc.name=vim# sysdig -p&%proc.name %fd.name& &evt.type=accept and proc.name!=httpd&# sysdig evt.type=chdir and user.name=root# sysdig -l# sysdig -L# sysdig -c topprocs_net# sysdig -c fdcount_by fd.sport &evt.type=accept&# sysdig -p&%proc.name %fd.name& &evt.type=accept and proc.name!=httpd&# sysdig -c topprocs_file# sysdig -c fdcount_by proc.name &fd.type=file&# sysdig -p &%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name& evt.type=open# sysdig -c topprocs_cpu# sysdig -c topprocs_cpu evt.cpu=0# sysdig -p&%evt.arg.path& &evt.type=chdir and user.name=root&# sysdig evt.type=open and fd.name contains /etc
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M02/57/2A/wKioL1STlVKAFzKZAAB_43PotoU883.jpg" />
更多信息 可以在 。
9.netstat - 显示开放的端口和连接
它是Linux管理员使用来显示各种网络信息的工具,如查看什么端口开放和什么网络连接已经建立以及何种进程运行在该连接之上。同时它也显示了不同程序间打开的Unix套接字的信息。作为大多数Linux发行版本的一部分,netstat的许多命令在 中有详细的描述。最为常用的如下:
$ netstat | head -20$ netstat -r$ netstat -rC$ netstat -i$ netstat -ie$ netstat -s$ netstat -g$ netstat -tapn
10.tcpdump - 洞察网络封包
tcpdump可以用来查看网络连接的封包内容。它显示了传输过程中封包内容的各种信息。为了使得输出信息更为有用,它允许使用者通过不同的过滤器获取自己想要的信息。可以参照的例子如下:
# tcpdump -i eth0 not port 22# tcpdump -c 10 -i eth0# tcpdump -ni eth0 -c 10 not port 22# tcpdump -w aloft.cap -s 0# tcpdump -r aloft.cap# tcpdump -i eth0 dst port 80
你可以文章&&中找到详细描述。
11.vmstat - 虚拟内存统计信息
vmstat是虚拟内存(virtual memory statistics)的缩写,作为一个内存监控工具,它收集和显示关于内存,进程,终端和分页和I/O阻塞的概括信息。作为一个开源程序,它可以在大部分Linux发行版本中找到,包括Solaris和FreeBSD。它用来诊断大部分的内存性能问题和其他相关问题。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M00/57/2D/wKiom1STlK6Sv1-pAADC5cUJk0Y210.jpg" />
M更多信息 参考 。
12.free - 内存统计信息
free是另一个能够在终端中显示内存和交换空间使用的命令行工具。由于它的简易,它经常用于快速查看内存使用或者是应用于不同的脚本和应用程序中。在这里你可以看到。几乎所有的系统管理员日常都会用这个工具。:-)
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M02/57/2D/wKiom1STlK7Tr3cmAAB1GAu-ZTo363.jpg" />
13.Htop - 更加友好的top
Htop基本上是一个top改善版本,它能够以更加多彩的方式显示更多的统计信息,同时允许你采用不同的方式进行排序,它提供了一个用户友好的接口。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M01/57/2A/wKioL1STlVLCS4qQAAEdlGFiWiE710.jpg" />
你可以在文章&&中找到更多的信息 。
14.ss - 网络管理的现代替代品
ss是iproute2包的一部分。iproute2是用来替代一整套标准的Unix网络工具组件,它曾经用来完成任务。ss工具用来记录套接字统计信息,它可以显示类似netstat一样的信息,同时也能显示更多TCP和状态信息。一些例子如下:
# ss -tnap# ss -tnap6# ss -tnap# ss -s# ss -tn -o state established -p
15.lsof - 列表显示打开的文件
lsof命令,意为&list open files&, 用于在许多类Unix系统中显示所有打开的文件及打开它们的进程。在大部分Linux发行版和其他类Linux操作系统中系统管理员用它来检查不同的进程打开了哪些文件。
# lsof +p process_id# lsof | less# lsof &u username# lsof /etc/passwd# lsof &i TCP:ftp# lsof &i TCP:80
你可以找到 更多例子 在
16.iftop - 类似top的了网络连接工具
iftop是另一个基于网络信息的类似top的程序。它能够显示当前时刻按照带宽使用量或者上传或者下载量排序的网络连接状况。它同时提供了下载文件的预估完成时间。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M00/57/2A/wKioL1STlVKw8eipAAFSTfBbMng414.jpg" />
更多信息可以参考。
17.iperf - 网络性能工具
iperf是一个网络测试工具,能够创建TCP和UDP数据连接并在网络上测量它们的传输性能。它支持调节关于时间,协议和缓冲等不同的参数。对于每一个测试,它会报告带宽,丢包和其他的一些参数。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M01/57/2D/wKiom1STlLCzr838AAEXWipNXlE623.jpg" />
如果你想用使用这个工具,可以参考这篇文章:
18.Smem - 高级内存报表工具
Smem是最先进的Linux命令行工具之一,它提供关于系统中已经使用的和共享的实际内存大小,试图提供一个更为可靠的当前内存使用数据。
$ smem -m$ smem -m -p | grep firefox$ smem -u -p$ smem -w -p
参考我们的文章:
二、图形化或基于Web的性能工具
19.Icinga - Nagios的社区分支版本
Icinga是一个开源免费的网络监控程序,作为Nagios的分支,它继承了前者现有的大部分功能,同时基于这些功能又增加了社区用户要求已久的功能和补丁。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M00/57/2D/wKiom1STlLDii6kpAAC0znwmrgM659.jpg" />
更多信息请参考。
20.Nagios - 最为流行的监控工具
作为在Linux上使用最为广泛和最为流行的监控方案,它有一个守护程序用来收集不同进程和远程主机的信息,这些收集到的信息都通过功能强大的web界面进行呈现。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M02/57/2A/wKioL1STlVXDUzvZAADYIIKVx1M540.jpg" />
你可以在文章&&里面找到更多的信息
21.Linux process explorer - Linux下的procexp
Linux process explorer是一个Linux下的图形化进程浏览工具。它能够显示不同的进程信息,如进程数,TCP/IP连接和每一个进程的性能指标。作为Windows下procexp在Linux的替代品,是由Sysinternals开发的,其目标是比top和ps提供更好用户体验。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M01/57/2A/wKioL1STlVbQnDlBAAHqk7bdi8M386.jpg" />
查看 获取更多信息。
22.Collectl - 性能监控工具
你可以既可以通过交互的方式使用这个性能监控工具,也可以用它把报表写到磁盘上,并通过web服务器来访问。它以一种易读易管理的格式,显示了CPU,磁盘,内存,网络,网络文件系统,进程,slabs等统计信息。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M02/57/2D/wKiom1STlLLRoeTaAABA2wgm7Qk527.jpg" />
更多 关于。
23.MRTG - 经典网络流量监控图形工具
这是一个采用rrdtool的生成图形的流量监控工具。作为最早的提供图形化界面的流量监控工具,它被广泛应用在类Unix的操作系统中。查看我们关于的文章获取更多关于安装和配置的信息。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M01/57/2D/wKiom1STlLLwUebUAABUe8oi160557.jpg" />
24.Monit - 简单易用的监控工具
Monit是一个用来监控进程,系统加载,文件系统和目录文件等的开源的Linux工具。你能够让它自动化维护和修复,也能够在运行错误的情景下执行特定动作或者发邮件报告提醒系统管理员。如果你想要用这个工具,你可以查看。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M00/57/2A/wKioL1STlVbxPu1VAACZYMOoyA0974.jpg" />
25.Munin - 为服务器提供监控和提醒服务
作为一个网络资源监控工具,Munin能够帮助分析资源趋势和查看薄弱环节以及导致产生性能问题的原因。开发此软件的团队希望它能够易用和用户体验友好。该软件是用Perl开发的,并采用rrdtool来绘制图形,使用了web界面进行呈现。开发人员推广此应用时声称当前已有500多个监控插件可以&即插即用*&。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/wyfs02/M02/57/2A/wKioL1STlVeTsD4JAACwawT3d-Q370.jpg" />&
更多信息可以在。
作者: 译者: 校对:
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
Linux系统的魅力之一就是你可以直接从终端使用命令行来管理整个
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
讲师: 4人学习过讲师: 13人学习过讲师: 4人学习过
Nagios是一个流行的电脑系统和网络监控程序,能监视所
Zabbix能监视各种网络参数,保证服务器系统的安全运营
性能监测是系统优化过程中重要的一环,如果没有监测、
Java学习笔记在JavaWorld技术论坛(.tw/)和作者的网站(http://caterpillar.onlyfun.net/Gossip/)提
51CTO旗下网站使用JConsole监控进程、线程、内存、cpu、类情况 - CSDN博客
使用JConsole监控进程、线程、内存、cpu、类情况
Jconsole简介:
Jconsole是一个JMX兼容的监视工具。它使用虚拟机的JMX机制来提供运行在Java平台的应用程序的性能与资源耗费信息。
监控进程使用方法如下:
由于JConsole监控需要使用JMX代理技术,因此在启动应用程序的参数中添加以下几个参数:
-Djava.rmi.server.hostname=192.168.1.80
-Dcom.sun.management.jmxremote.port=8089
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
配置完以上参数后,本地启动JConsole后,选择相应的进程名称,点击连接后,就可监控了。
关于JMX的介绍:
/?uid-115295-action-viewspace-itemid-804845
Jconsole界面:
Jconsole界面由以下六个选项卡组成:
Summary选项卡:显示JVM和被监视值的汇总信息
Memory选项卡:显示内存使用信息。
Threads选项卡:显示线程使用信息。
Classes选项卡:显示类(class)加载信息。
MBeans选项卡:显示MBeans信息
VM选项卡:显示JVM信息。
以下是详细介绍:
查看汇总信息:
Summary选项卡显示了关于线程使用、内存消耗和class加载的一些关键监视信息,以及JVM和的信息。
Uptime:JVM已运行时长。
Total compile time:花费在即时编译(JIT compilation)中的时间。
Process CPU time:JVM花费的总CPU时间。
Live threads:当前活动的daemon线程加non-daemon线程数量。
Peak:自JVM启动后,活动线程峰值。
Daemon threads:当前活动的Daemon线程数量。
Total started:自JVM启动后,启动的线程总量(包括daemon,non-daemon和终止了的)
Current heap size:堆(heap)占用的内存量,以K为单位。
Committed memory:为堆分配的内存总量
Maximum heap size:堆占用的最大内存量。
Objects pending for finalization:等待析构(finalization)的对象数量。
Garbage collector information:GC信息,摆阔垃圾回收器名称,已执行的垃圾回收次数和执行垃圾回收总耗时。
Current classes loaded:当前被加载到内存的classes数量
Total classes loaded:自JVM启动后被加载到内存的classes总量,包括后来卸载的。
Total classes unloaded:自JVM启动后,从内存卸载的classes总量。
Operating System:
Total physical memory:物理内存总量
Free physical memory:物理内存空闲量
Committed virtual memory:为运行中的进程分配的虚拟内存总量
监视内存消耗:
Memory选项卡提供了内存消耗和内存池信息。
以上图表显示了JVM的内存使用和时间的对应关系,包括heap和non-heap内存以及指定的(specific)内存池。内存池种类与具体使用的JVM有关,以HotSpot JVM为例,内存池有:
l Eden Space(heap):大多数对象初始化时从Eden Space池分配内存,即是存在于此池中
l Survivor Space(heap):此池包含的对象是那些原先在eden space中,但是已经经历过垃圾回收而仍然存在的对象。
l Tenured Generation(heap):在surviver space中已经存在了一段时间之后的对象会移动到这个池中。
l Permanent Generation(non-heap):包含虚拟机自身的所有反射数据。比如class和mothod对象。对于使用sharing的JVM,这一代分为只读和读写两个区域。
Code Cache (non-heap):HotSpot JVM也包含一个“代码缓存”,是编译和存储本地代码所占用的内存。
查看关于内存池的详细信息:
Detail区域显示了几种当前内存度量:
lUsed:当前使用的内存总量。使用的内存总量是指所有的对象占用的内存,包括可达和不可达的对象。
lCommitted:JVM可使用的内存量。Committed内存数量可能随时间变化而变化。JAVA虚拟机可能将某些内存释放,还给操作系统,committed内存可能比启动时初始分配的内存量要少。Committed内存总是大于等于used内存。
lMax:内存管理可用的最大内存数量。此值可能改变或者为未定义。如果JVM试图增加使用内存(used memory)超出了committed内存,那么即时使用内存小于或者等于最大内存(比如系统虚拟内存较低),内存分配仍可能失败。
右下角的图表显示了内存池在heap和non-heap消耗的内存量。当内存使用超出了内存使用阀值时,柱状图会变红。你可以通过设置MemoryMXBean的一个属性来调整内存占用阀值。
Heap and Non-heap内存
JVM管理两种内存:heap和non-heap内存,两种内存都是在JVM启动时建立。
Heap memory是运行时数据区域,用于JVM为所有对象实例和队列分配的内存。Heap可能为固定植或者可变值。垃圾收集器是一个用于回收对象占用的heap内存的自动化内存管理系统。
Non-heap memory 包含一个在所有线程共享的方法区域(method area)和内部进程或JVM优化所需的内存。它存储了每一个类的结构,比如运行常量池,字段和方法数据,构造函数和方法的代码。方法区域逻辑上是 heap的一部分,但是依赖于实现,JVM可能不进行垃圾收集或压缩。像heap一样,方法区域可能为固定或可变大小。方法区域所需要的内存没有必要是连 续的。
除了方法区域之外,一个JVM实现的内部进程或优化所需的内存也属于non-heap内存。比如JIT编译器为了提高性能而用于存储本地机器码所需的内存。
内存池和内存管理
内存池(Memory pools)和内存管理器是JVM内存管理系统的关键部分
一个内存池(memory pool)代表JVM管理的一块内存区域。JVM拥有最少一个内存池,JVM在运行中可能创建或删除内存池。一个内存池可以属于heap内存或者non-heap内存。
内存管理器(memory manager)管理一个或多个内存池。垃圾回收其是一种负责回收被不可打对象占用的内存的内存管理器。一个JVM可以拥有一个或者多个内存管理器。JVM在运行中可能增加或删除内存管理器。一个内存池可以被多于一个内存管理器管理。
垃圾收集:
垃圾收集(GC)是指JVM释放那些被无引用对象占用的内存空间。它通常认为那些有活动引用的对象是“活”对象,而那些没有引用或不可达的对象为“死”对象”。垃圾收集是释放被死对象占用的内存的过程。GC的算法和参数对性能有巨大的影响。
HotSpot VM垃圾收集器使用 分代垃圾收集(generational garbage collection)。分代GC利用了大多数程序中,从经验看有如下特点:
很多对象有一个很短的生存期(比如迭代器iterators、本地变量)
某些对象拥有很长的生存期(比如高层持久化对象)
所 以,分代的GC将内存划分为代(generations)并且赋予每一个内存池。当一代用尽了分配的内存,VM会在那个内存池进行一次局部 (partial)的垃圾收集(或者叫minor collection)来收集被死对象占用的内存。局部垃圾收集比全垃圾收集(full GC)快的多。
HotSpot VM定义了2代:young generation (有时叫做nursery)和old generation。Young generation由一个eden space和两个survivor spaces组成。最初,VM将所有的对象放入eden space,大多数对象死在那里~~~,当VM运行了一次minor GC,VM将剩余的对象从eden space移动到某个survivor space中。然后VM将那些在survivor spaces中生存了足够长时间的对象移动到位于old generation中的tenured
spaces。当tenured spaces满了以后,将发生一次full GC,full GC涉及到所有存活的对象,因此比较慢。Permanent generation保存了所有的虚拟机自身的反射数据,比如class和method objects
默认情况下代的排列类似于下图:
如同下文链接中说明的,如果垃圾收集器成为瓶颈,你可以通过自定义代大小来提高性能。使用jconsole可以发现你的性能情况对垃圾收集器参数的敏感程度。详细情况见:
监视线程使用:
线程选项卡提供了关于线程使用的信息。
左下角列出的为所有的活动线程。如果你在过滤(filter)对话框输入字符串,那么线程列表将尽显示那些包含你输入字符串的线程。在线程列表上点击线程名,可以显示在右侧显示县城信息,包括线程名,状态和调用堆栈。
图表显示了活动线程/时间。有三行内容:
Magenta:线程总数
Red:峰值线程数
Blue:活动线程数。
关于线程、daemon线程详细信息,请查看链接:
监视Class加载:
Classes选项卡显示了关于class loading的信息:
图表显示了 类加载/时间
红线是类加载总数(包括后来卸载的)
蓝线表示当前的类加载数量。
选项卡底部的Detail节显示了自JVM启动后类加载的总量,当前加载量和卸载量。
监视和管理MBeans:
MBean选项卡显示了所有在platform. MBean上注册的MBeans的信息。
左边的树形结构显示了所有的MBean,按其对象名排序。当在树种选择了一个MBean之后,其属性、操作、通知和其他信息会在右边显示。
如果属性值是可写的(可写会蓝色显示),你可以设置属性值。你也可以调用在操作选项卡中显示的操作。
显示图表:
你可以通过双击属性值的方法显示一个属性值/时间图表,比如,如果你双击java.lang.GarbageCollector.Copy Mbean的CollectionTime属性,你会得到如下图所示的显示:
查看VM信息。
VM选项卡提供了JVM的信息。
这些信息包括:
Uptime:JVM启动后的总时间。
Processes CPU Time:JVM启动后消耗的总CPU时间。
Total Compile Time:即时编译(JIT compilation)消耗的总时间。JVM的具体实现决定JIT编译何时发生。Hotspot VM使用adaptive compilation,在这种方式zhogn ,VM使用标准的解释器(interpreter)运行一个应用程序,但是会分析其代码判断性能瓶颈或者”hot spots”。
配置tomcat使用jconsole
修改catalina脚本
平台:修改catalina.bat,在dorun和dostart段开头增加一行(注意是一行):
set JAVA_OPTS=%JAVA_OPTS% -Djava.rmi.server.hostname=192.168.1.101
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=&9004&
-Dcom.sun.management.jmxremote.authenticate=&false& -Dcom.sun.management.jmxremote.ssl=&false&
Unix/Linux平台:修改catalina.sh,在dorun和dostart段开头增加一行(注意是一行):
JAVA_OPTS=&$JAVA_OPTS &-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=&9004&
-Dcom.sun.management.jmxremote.authenticate=&false& -Dcom.sun.management.jmxremote.ssl=&false&
启动jconsole
启动tomcat之后,根据上文中的jconsole简介中的命令启动jconsole,如果是在本地运行jconsole,会出现如下界面:
直接进行连接即可。
如果是远程监控,需要点击远程选项卡并输入相关信息,示例如下:
“主机名或ip”处填写需要监视的主机ip,端口为服务器上上文中添加的-Dcom.sun.management.jmxremote.port=&portNumber&设定的端口,本文以9004为例。在设定为:-Dcom.sun.management.jmxremote.authenticate=&false& 的情况下,用户名和口令留空即可。
如果需要使用JConsole远程监控&Tomcat可以在命令行直接输入:
JConsole 192.168.1.101:9004
进阶安全设定
在上文中的配置适用于在环境中监视tomcat,如果是在生产环境中监视tomcat则需要在安全性上有进一步要求。
配置jmx访问密码
1. 修改上文中的catalina脚本中的JAVA_OPT参数,将
-Dcom.sun.management.jmxremote.authenticate=&false& 修改为:
-Dcom.sun.management.jmxremote.authenticate=&true&
2. 将$JRE/lib/management/jmxremote.password.template文件在同目录下复制一份,重命名为$JRE/lib /management/jmxremote.password,编辑jmxremote.password,添加允许访问的用户名及密码,比如添加用户 zxwh,密码为zxme,则在文件尾添加一行:
注意用户密码不能包含空格,tab等字符
3. 编辑$JRE_HOME/lib/management/jmxremote.access文件,对刚才添加的用户赋予一定的权限:
zxwh readonly (或者readwrite)
4. 确认jmxremote.password和jmxremote.access两个文件中的用户是相同的。注意如果jmxremote.access中没有对应用户的话,配置是无效的。
注:以上配置文件的位置都是可以更改的,具体配置方法在此不再赘述。
5. 由于jmxremote.password中的密码都是明文保存的,所以jmxremote.password、jmxremote.access文件的权限要注意,应该设置为只有owner才可读,当然这个用户也必须是启动tomcat的用户。
6. 启动jconsole进行连接,在用户名和口令处输入设定的用户和密码。
7. 使用密码认证方式进行连接,不但可以提高安全性,而且可以对用户的权限进行设置。如果不使用密码认证的方式,则无法对用户的权限进行限制。
配置使用ssl进行加密连接
1. 在服务器上使用keytool创建密钥对
keytool是java平台自带的一个密钥和证书管理工具,使用keytool创建密钥对:
keytool -genkey -alias tomcat -keystore /somepath/tomcatKeyStore
按照提示输入相关信息(包括设定密码、姓、组织名等),这些信息是可以随便输入的,但从产品角度讲应该统一设定。输入的密码在今后操作中均需要使用。
2. 导出公钥
keytool -export -alias tomcat -keystore /somepath/tomcatKeyStore -file /somepath/jconsole.cert
3. 将公钥导入至需要运行jconsole的机器。
keytool –import –alias jconsole –keystore /somepath/jconsoleKeyStore -file /somepath/jconsole.cert
4. 修改tomcat的catalina脚本
将-Dcom.sun.management.jmxremote.ssl=&false&修改为:
-Dcom.sun.management.jmxremote.ssl=&true&,并在 JAVA_OPTS变量行添加:
-Djavax.net.ssl.keyStore=/somepath/jconsoleKeyStore
-Djavax.net.ssl.keyStorePassword=设定的密码
5. 使用如下参数启动jconsole :
jconsole -J-Djavax.net.ssl.trustStore=/somepath/jconsoleKeyStore
6. 填入主机名、用户、口令连接服务器。
1. 在执行shutdown.sh或者shutdown.bat脚本关闭tomcat时出现如下错误,tomcat无法关闭:
错误: 代理抛出异常: java.rmi.server.ExportException: Port already in use: 9004;
nested exception is:
java.net.BindException: Address already in use: JVM_Bind
本文已收录于以下专栏:
相关文章推荐
一篇Sun项目主页上介绍JConsole使用的文章,前段时间性能测试的时候大概翻译了一下以便学习,今天整理一下发上来,有些地方也不知道怎么翻,就保留了原文,可能还好理解点,呵呵,水平有限,翻的不好,大...
如何查看是否有Java线程死锁?下面介绍两种方法。JconsoleJconsole是JDK自带的图形化界面工具。
使用JDK给我们的的工具JConsole,可以通过打开cmd然后输入jconsole打...
本文转自:/blog/810150
一、JConsole是什么
    从Java 5开始 引入了 JConsole。JConsole 是一个内置...
VisualVM是Sun的一个OpenJDK项目,其目的在于为Java应用创建一个整套的问题解决工具。它集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览H...
内存及cpu占用测试方法小结
micro cpu monitor
功能——Cpu 实时监控工具,可运行在模拟器、真机上。
优点:实时、可与应用程序同时在前台展现
 可在屏幕底部查看,仅占一个像...
转自:http://blog.csdn.net/on_my_way20xx/article/details/8562055
目录(?)[+]
JVM的GC机制四GC调优的小例子
1、测试查看单独的class的资源消耗方法。
Runtime r = Runtime.getRuntime();    
long freeMemory = r.freeMemory();
我的一个java程序偶尔会出现cpu占用很高的情况
一直不知道什么原因
今天终于抽时间解决了
系统是win2003
jvisualvm 和 jconsole貌似都只能看到总共占...
Jconsole简介:
Jconsole是一个JMX兼容的监视工具。它使用Java虚拟机的JMX机制来提供运行在Java平台的应用程序的性能与资源耗费信息。
监控进程使用方法如下:
http://dolphin-/blog/366216
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 监控cpu内存使用情况 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信