如何取得jvm实例的cpujvm bind 占用端口

Java进程占用CPU高的问题跟踪
Java进程占用CPU高的问题跟踪
 /u/12331/showart_255325.html      WebLogic高cpu消耗诊断一例    故障分析报告  故障描述     日上午,在系统监控时发现WebLogic实例的JAVA进程CPU使用率非常高,长期在60%以上,而内存消耗也较大。在11:30分,WebLogic其中一个实例内存溢出,很快另外一个实例访问也异常缓慢。经过重启,系统访问正常。  发生时间    
11:30~ 11:40  故障分析     在故障发生时,WebLogic的被管服务器mserver2的gc日志出现连续FULL GC现象,如下所示:    : [Full GC : [Tenured: 1441791K-&41792K), 50.8704538 secs] 1823487K-&23488K), [Perm : 122693K-&1072K)], 50.8707784 secs]    : [Full GC : [Tenured: 1441791K-&41792K), 43.3959313 secs] 1823487K-&23488K), [Perm : 122691K-&1072K)], 43.3962451 secs]    : [Full GC : [Tenured: 1441791K-&41792K), 43.8102222 secs] 1823487K-&23488K), [Perm : 122692K-&1072K)], 43.8105214 secs]    : [Full GC : [Tenured: 1441791K-&41792K), 44.0541711 secs] 1823487K-&23488K), [Perm : 122692K-&1072K)], 44.0545032 secs]    : [Full GC : [Tenured: 1441791K-&41792K), 51.2142139 secs] 1823478K-&23488K), [Perm : 122709K-&1072K)], 51.2145271 secs]    由此,判断有大量对象占用了JVM的内存,并且在GC后没有释放。    同时,实例的输出日志中,发现有session复制现象,如下所示:    &    这说明,WebLogic的被管服务器mserver2在向mserver1复制会话。    由于mserver1无法处理两个被管服务器的业务,很快也访问缓慢了。    之后,重启了WebLogic的2个实例,系统恢复正常。     在接下来的系统监控中,发现WebLogic其中一个实例的JAVA进程的CPU使用率依然非常高,针对这一现象,我们dump出CPU的使用情况,发现有些JAVA线程使用CPU资源较高,且占用时间较长,如下所示:    PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/LWPID     27662 cncbss M cpu10 0 10 0:22.46 22% java/73     27662 cncbss M cpu9 0 10 0:20.31 22% java/72     27662 cncbss M run 0 10 0:22.12 22% java/75    经过多次dump CPU使用情况,这三个线程仍然存在。    此后dump WebLogic的线程,发现是如下线程导致高消耗CPU:    "ExecuteThread: '51' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0x00ef7008 nid=0x4a runnable [0xx]     at java.util.Vector.indexOf(Vector.java:363)     - waiting to lock &0xa21b73f8& (a java.util.Vector)     at java.util.Vector.contains(Vector.java:321)     at cnc.util.FyCol.add(FyCol.java:204)     at cnc.util.FyCol.add(FyCol.java:194)     at cnc.util.RecordSet.(RecordSet.java:199)     at cnc.util.RecordSet.(RecordSet.java:93)     at cnc.util.FyDao.query(FyDao.java:264)     at cnc.util.FyDao.query(FyDao.java:234)     at listquery.ListQueryBean.getfreeList(ListQueryBean.java:404)     at listquery.ListQuery_gq76y8_EOImpl.getfreeList(ListQuery_gq76y8_EOImpl.java:98)     at listquery.ListQuery_gq76y8_EOImpl_WLSkel.invoke(Unknown Source)     at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:166)     at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:290)     at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:248)     at listquery.ListQuery_gq76y8_EOImpl_816_WLStub.getfreeList(Unknown Source)     at cnc.query.list.QueryList.createExcel(QueryList.java:790)     at cnc.query.list.ExportData.processRequest(ExportData.java:39)     at cnc.query.list.ExportData.probe$0$doGet(ExportData.java:15)     at cnc.query.list.ExportData.doGet(ExportData.java)     at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)     at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)     at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)     at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)     at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)     at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7047)     at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)     at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)     at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)     at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)     at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)     at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)    &    经判断,这是清单查询的功能。    之后,转由开发人员对清单查询代码进行分析。  总结及改进措施     此次故障是由于个别程序性能不佳消耗CPU过高导致,在3~5个这样查询的情况下就会使系统出现缓慢现象,而且清单查询对JVM内存消耗也较大,如果有大量清单查询会使JVM的内存出现溢出情况。     由于在目前情况下,1台服务器的处理能力不足,特别是在业务高峰时,WebLogic的1个被管服务器并不足以支撑2个被管服务器的业务,因此其中一台服务器出现宕机、挂起等严重故障,往往另外一台也会出现相同故障。     鉴于上述情况,我们提出下列改进意见:    1、 在第三台机器上增加一个WebLogic实例,加入到集群系统。这样在一台被管服务器出现故障时,另外两台依然可以实现负载均衡功能,宕机的可能性大大降低。    2、 将清单查询从BSS系统中移出去,目前这一项目正在进行。    3、 改良清单查询程序的性能。    &    &    &    &    &    附:    &        收集高 CPU 占用率的数据  对于有关收集高 CPU 占用率的数据的特定操作信息,请根据您的操作系统执行以下步骤。    重要说明:  这些操作系统的所有信息都基于 Sun JVM。 目前在 JRockit 中还没有办法将 PID 从说明 CPU 占用率的操作系统命令(prstat、top、pslist 等等)映射到 Thread Dump 中的正确线程。 从 Jrockit 的 70SP4RP2 和 81SP2RP1 以后的版本起,就可实现此映射。 例如,在 Linux 中,Thread Dump 在以后的版本中将采用如下形式(PID 显示在 Thread Dump 中):   "ExecuteThread: '20' for queue: 'default'" id: 0x00000e80 prio: 5 ACTIVE, DAEMON, GCABLE   thread: 0x469b0af0 lastj: 0xac0f19c   pt_thr: 237596 pid: 23166   at COM.jrockit.vm.Classes.defineClass0(Native Method)@0x8b4b798   at COM.jrockit.vm.Classes.defineClass(Unknown Source)@0x8b4b8b1   at java.lang.ClassLoader.defineClass(Unknown Source)@0x8b4b46f    在上例中,PID 是 23166,您可以通过 Linux 或任何所在系统上的 top(或任何您需要在操作系统上使用的特定命令)输出直接关联该 PID。    转换为十六进制号码    备注:为协助您计算在本模式中讨论的十六进制值,您可以在 Shell 脚本中使用下列行将十进制号码转换为十六进制号码。如果您使用 Unix 操作系统,那么转换会很方便。  dec2hex.sh:     printf "dec -& hex: %d = %x \n" ${1} ${1}  用法:  &   $ sh dec2hex.sh 755     dec -& hex: 755 = 2f3    Solaris     1. 在 Java 进程中运行 prstat命令。重复几次这个操作,以便您能够看到一种模式。例如:prstat -L -p&1 1&     2. 在 Java 进程中运行 pstack命令以获得从轻量型进程 (LWP) 到 PID(进程 ID)的映射。&    示例:pstack 9499 并将输出结果重定向到一个文件。&  如果您使用 Solaris 中的常规线程库(即,在 LD_LIBRARY_PATH 中没有 /usr/lib/lwp),LWP 就不会直接映射到操作系统线程,因此您必须从进程中执行 pstack(所以检查看您是否正在使用替代线程库)。     3. 经过一段时间后对服务器进行若干 Thread Dump,确保您执行正确的线程。&    您可以通过在 Java 进程中执行 kill -3&来达到此目的。     4. 将 LWP ID 映射到 Java 线程 ID。&    例如,如果上述的 LWP 为“8”,它可以映射到 Java 线程“76”。然后将 76 换算为十六进制值 0x4c。&     5. 检查 Thread Dump,找到匹配“nid= &上述标识符/值&”的线程。    在本示例中,您找到匹配“nid=0x4c”的线程,而该线程就是正在消耗 CPU 资源的那个线程。
发表评论:
TA的最新馆藏java进程占用cpu异常情况的排查方法
很长时间没有写过文档类的东西了,忽然觉得做了快十年的运维也应该将日常积累的东西晒晒。这是第一篇文章。写此文的原因,近期我司有两台服务器的cpu占用异常,经常收到报警短信,经过一系列的排查发现,由于这两台的应用的java进程占用资源过高,且单个进程的线程数量已超过系统允许范围。
采用的排查方法:
方案一:top命令 可以动态查看进程的ID。然后针对具体的异常java进程,使用top -H -p 进程号,即可动态的查看具体的进程对应所在的每个线程的动态变化情况。
方案二:ps命令
可以使用ps -aux 来查看具体的每个进程的实际应用占用资源情况。结合awk、sort 可以快速定位。实例:ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
。然后再使用下面几个方式查找问题:
进程ID,查看问题的线程。
2、ps -mp pid -o THREAD,tid,time 查看线程。
方案三: pstree
命令, 使用pstree -p 用户名 ,可以查看该用户下的进程数。
通过上述方法查询和分析后,再通过java分析命令jstack 来分析具体原因。
先 printf "%x\n" tid
,tid为有问题的线程号,将其转换为十六进制。
然后打印线程的堆栈信息:
jstack -F pid |grep tid -A 30| sort -rn
将结果发给开发人员分析问题。
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析: 1,程序属于CPU密集型,和开发沟通过,排除此类情况. 2,程序代码有问题,出现死循环,可能性极大. 问题解决: 1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出. 2,记得原来通过 ...
使用tomcat做为java容器,cpu占用偏高的原因,目前公司服务器上面跑的ubuntu环境nginx+tomcat+mysql运行一段时间之后java进程cpu偏高,会出现网站打不开的情况.所以进行了如下分析. 一,首先查看tomcat日志,如果有出现OOM错误(内存溢出)可以对应的加大jvm的内存大小. 1,修改tomcat目录下bin目录下的cata ...
httpd.exe进程占用cpu超过50%,关闭掉Apache服务,cpu应用率立刻下降到0.
重新启动Apache又出现占用cpu高的情况.
原因是:httpd.exe和防火墙配置有冲突. 解决方法如下: 1.网上邻居-&本地链接-&属性-&internet协议(TCP/IP)-&属性-&高级-&wins标签-&gt ...
问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析: 1,程序属于CPU密集型,和开发沟通过,排除此类情况. 2,程序代码有问题,出现死循环,可能性极大. 问题解决: 1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出. 2,记得原来通过 ...
问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析: 1,程序属于CPU密集型,和开发沟通过,排除此类情况. 2,程序代码有问题,出现死循环,可能性极大. 问题解决: 1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出. 2,记得原来通过 ...
这篇文章主要介绍了Linux中使用Shell脚本查看Java线程的CPU使用情况,需要的朋友可以参考下线上Java应用,在业务高峰期的时候经常出现CPU跑高,需要查看实时的线程占用cpu情况,下面是一个很好用的脚本,可以快速导出每个线程的占用CPU情况,结合jstack日志,排查到具体的线程类名. 一.首先获得jvm的进程ID: 代码如下:ps -ef|gr ...
在IIS6下,经常出现w3wp.exe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢.下面讲解如何降低w3wp.exe进程占用cpu和内存过多的办法. 解决CPU占用过多: 1.在IIS中对每个网站进行单独的应用程序池配置.即互相之间不影响. 2.设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭. 根据w3 ...
一朋友求助,生产服务器一台AIX小机WAS进程占用CPU率较高引发频繁报警,而此前该服务器一直正常. 环境:AIX 5.3/WAS6.1 发生故障现象时的截图如下: 问题处理步骤 1.首先通过topas监控可以看到当前占用CPU率较高的那个java进程,记录下进程号:.通过ps -mp 1396916 -o THREAD 以查找当前进程正 ...3583人阅读
一、shell下提供top、ps命令查看当前cpu、mem使用情况,简要介绍如下:
1. 使用ps查看进程的资源占用
查看进程信息时,第三列就是CPU占用。
[root@localhost utx86]# ps -aux | grep my_process
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
root&& 1& 0.9&& 3& pts/12&& SL+& 14:18&& 0:05 ./my_process
root&& 1&& 0.0&& 3852&& 572&&& pts/3&&& S+&& 14:20&& 0:00 grep my_process
每一列含义如下
USER&& PID&& %CPU %MEM& VSZ& RSS TTY& STAT&& START& TIME&& COMMAND
即my_process进程当前占用cpu 3.4%, 内存0.9%
2.&top动态查看系统负荷
显示后退出
[root@localhost utx86]# top -n 1
top - 14:23:20 up& 5:14, 14 users,& load average: 0.00, 0.04, 0.01
Tasks: 183 total,&& 1 running, 181 sleeping,&& 1 stopped,&& 0 zombie
Cpu(s):& 1.8%us,& 1.4%sy,& 0.0%ni, 95.8%id,& 0.7%wa,& 0.1%hi,& 0.2%si,& 0.0%st
Mem:&& 2066240k total,& 1507316k used,&& 558924k free,&& 190472k buffers
Swap:& 2031608k total,&&&&&& 88k used,& 2031520k free,& 1087184k cached
1)获取cpu占用情况
[root@localhost utx86]# top -n 1 |grep Cpu
Cpu(s):& 1.9%us,& 1.3%sy,& 0.0%ni, 95.9%id,& 0.6%wa,& 0.1%hi,& 0.2%si,& 0.0%st
解释:1.9%us是用户占用cpu情况
1.3%sy,是系统占用cpu情况
得到具体列的值:
[root@localhost utx86]# top -n 1 |grep Cpu | cut -d &,& -f 1 | cut -d &:& -f 2
[root@localhost utx86]# top -n 1 |grep Cpu | cut -d &,& -f 2
2)获得内存占用情况
[root@localhost utx86]# top -n 1 |grep Mem
Mem:&& 2066240k total,& 1515784k used,&& 550456k free,&& 195336k buffers
获得内存情况指定列
[root@localhost c++_zp]# top -n 1 |grep Mem | cut -d &,& -f 1 | cut -d &:& -f 2
2066240k total
[root@localhost c++_zp]# top -n 1 |grep Mem | cut -d &,& -f 2
1585676k used
二、采用编程实现查看cpu占用率和 mem使用情况
现在可以通过程序将cpu使用率、内存使用情况保存到文件中
// test.cpp
#include &stdio.h&
#include &unistd.h&
#include &stdlib.h&
int main()
system(&top -n 1 |grep Cpu | cut -d \&,\& -f 1 | cut -d \&:\& -f 2 &cpu.txt&);
system(&top -n 1 |grep Cpu | cut -d \&,\& -f 2 &&cpu.txt&);
system(&top -n 1 |grep Mem | cut -d \&,\& -f 1 | cut -d \&:\& -f 2 &&cpu.txt&);
system(&top -n 1 |grep Mem | cut -d \&,\& -f 2 &&cpu.txt&);
编译、运行:
[root@localhost study]# g++ test.cpp
[root@localhost study]# ./a.out
[root@localhost study]# cat cpu.txt
2066240k total
1619784k used
三、硬盘使用率编程实现
1.硬盘使用率 命令df -lh
2.程序实现,调用statfs
c/c++程序:
int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);
struct statfs {
/* type of filesystem (see below) */
/* optimal transfer block size */
/* total data blocks in file system */
/* free blocks in fs */
/* free blocks avail to non-superuser */
/* total file nodes in file system */
/* free file nodes in fs */
/* file system id */
/* maximum length of filenames */
int fstatvfs(int fildes, struct statvfs *buf);
int statvfs(const char *restrict path, struct statvfs *restrict buf);
struct statvfs {
unsigned long
/* file system block size */
unsigned long
/* fragment size */
fsblkcnt_t
/* size of fs in f_frsize units */
fsblkcnt_t
/* # free blocks */
fsblkcnt_t
/* # free blocks for non-root */
fsfilcnt_t
/* # inodes */
fsfilcnt_t
/* # free inodes */
fsfilcnt_t
/* # free inodes for non-root */
unsigned long
/* file system id */
unsigned long
/* mount flags */
unsigned long
/* maximum filename length */
#include &sys/vfs.h&
#include &sys/statvfs.h&
#include &string.h&
#include &stdlib.h&
#include &stdio.h&
int gethd(char *path);
int main()
char buf[256],*
file=fopen(&/etc/fstab&,&r&);
memset(buf,0,sizeof(buf));
while(fgets(buf,sizeof(buf),file))
ptr=strtok(buf,& &);
if(ptr&&((strncmp(ptr,&/dev&,4)==0)))
ptr=strtok(NULL,& &);
gethd(ptr);
fclose(file);
int gethd(char *path)
struct statvfs stat1;
statvfs(path,&stat1);
if(stat1.f_flag)
printf(&%s total=%dK free=%dK %0.1f%%
\n&,path,stat1.f_bsize*stat1.f_blocks/1024,stat1.f_bsize*stat1.f_bfree/1024,
((float)stat1.f_blocks-(float)stat1.f_bfree)/(float)stat1.f_blocks*100);
import java.io.*;
* linux 下cpu 内存 磁盘 jvm的使用监控
* @author avery_leo
public class TT {
* 获取cpu使用情况
* @throws Exception
public double getCpuUsage() throws Exception {
double cpuUsed = 0;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(&top -b -n 1&);// 调用系统的“top&命令
BufferedReader in =
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str =
String[] strArray =
while ((str = in.readLine()) != null) {
int m = 0;
if (str.indexOf(& R &) != -1) {// 只分析正在运行的进程,top进程本身除外 &&
strArray = str.split(& &);
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
if (++m == 9) {// 第9列为CPU的使用百分比(RedHat
cpuUsed += Double.parseDouble(tmp);
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
return cpuU
* 内存监控
* @throws Exception
public double getMemUsage() throws Exception {
double menUsed = 0;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(&top -b -n 1&);// 调用系统的“top&命令
BufferedReader in =
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str =
String[] strArray =
while ((str = in.readLine()) != null) {
int m = 0;
if (str.indexOf(& R &) != -1) {// 只分析正在运行的进程,top进程本身除外 &&
// System.out.println(&------------------3-----------------&);
strArray = str.split(& &);
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
if (++m == 10) {
// 9)--第10列为mem的使用百分比(RedHat 9)
menUsed += Double.parseDouble(tmp);
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
return menU
* 获取磁盘空间大小
* @throws Exception
public double getDeskUsage() throws Exception {
double totalHD = 0;
double usedHD = 0;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(&df -hl&);//df -hl 查看硬盘空间
BufferedReader in =
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str =
String[] strArray =
int flag = 0;
while ((str = in.readLine()) != null) {
int m = 0;
if (flag & 0) {
strArray = str.split(& &);
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
System.out.println(&----tmp----& + tmp);
if (tmp.indexOf(&G&) != -1) {
if (m == 2) {
System.out.println(&---G----& + tmp);
if (!tmp.equals(&&) && !tmp.equals(&0&))
totalHD += Double.parseDouble(tmp
.substring(0, tmp.length() - 1)) * 1024;
if (m == 3) {
System.out.println(&---G----& + tmp);
if (!tmp.equals(&none&) && !tmp.equals(&0&))
usedHD += Double.parseDouble(tmp.substring(
0, tmp.length() - 1)) * 1024;
if (tmp.indexOf(&M&) != -1) {
if (m == 2) {
System.out.println(&---M---& + tmp);
if (!tmp.equals(&&) && !tmp.equals(&0&))
totalHD += Double.parseDouble(tmp
.substring(0, tmp.length() - 1));
if (m == 3) {
System.out.println(&---M---& + tmp);
if (!tmp.equals(&none&) && !tmp.equals(&0&))
usedHD += Double.parseDouble(tmp.substring(
0, tmp.length() - 1));
// System.out.println(&----3----& + usedHD);
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
return (usedHD / totalHD) * 100;
public static void main(String[] args) throws Exception {
TT cpu = new TT();
System.out.println(&---------------cpu used:& + cpu.getCpuUsage() + &%&);
System.out.println(&---------------mem used:& + cpu.getMemUsage() + &%&);
System.out.println(&---------------HD used:& + cpu.getDeskUsage() + &%&);
System.out.println(&------------jvm监控----------------------&);
Runtime lRuntime = Runtime.getRuntime();
System.out.println(&--------------Free Momery:& + lRuntime.freeMemory()+&K&);
System.out.println(&--------------Max Momery:& + lRuntime.maxMemory()+&K&);
System.out.println(&--------------Total Momery:& + lRuntime.totalMemory()+&K&);
System.out.println(&---------------Available Processors :&
+ lRuntime.availableProcessors());
shell程序:
监视磁盘hda1
# disk_mon
# monitor the disk space
# get percent column and strip off header row from df
LOOK_OUT=0
until [ &$LOOK_OUT& -gt &90& ]
LOOK_OUT=`df | grep /hda1 | awk '{print $5}' | sed 's/%//g'`
echo $LOOK_OUT%
echo &Disk hda1 is nearly full!&
#!/bin/ksh
#检测硬盘剩余空间并警告的shell&nbspV050921
#简单说明:&可由root用户将此脚本加入crontab,启动时间一般最好设为每天营业前,当此脚本启动时如检测到已用硬盘空间超过指定范围,则将hdwarning.sh脚本拷贝到指定用户根目录下;否则将删除指定用户的目录下的hdwarning.sh脚本.
usedhd=80&&&&&&&&&&&#自定义超限已用硬盘空间大小比例,默认为80%
test&&$1&&&&&nbspuserdir=$1&||&nbspuserdir=/usr/scabs&&#前台用户的目录(默认设为统版用户),也可在调用此脚本时加上指定前台用户的目录参数
hdwarning=$(df&nbsp-v&|sed&'1d;s/.$//;s/\/dev\///'|awk&'$6&'&$usedhd&'&{print&$2,&&=&&,$6&%&}')
test&&$hdwarning&&&&&{&nbspcp&/usr/bin/hdwarning.sh&${userdir}/hdwarning.sh&&\
&&${userdir}/hdwarning.log&&nbspchmod&nbsp777&${userdir}/hdwarning.sh&${userdir}/hdwarning.log&&}&\
||&{&nbsprm&${userdir}/hdwarning.sh&nbsp2&/dev/null&&\
mv&${userdir}/hdwarning.log&${userdir}/hdwarning.log.bak&nbsp2&/dev/null&&}
hdwarning.sh
#!/bin/ksh
#检测硬盘剩余空间并警告的shell&nbspV050921
#增加当超标时,只在预先指定的前N位预先的指定用户登录时才显示提示信息,
#即只有这前面N位用户才有可能及时反馈,避免当超标时接到过多的前台反馈电话&nbspV050923
#请先编辑指定用户根下的&nbsp.profile&,在最后追加一行
#&&nbsptest&nbsp-x&nbsphdwarning.sh&&&&&nbsp./hdwarning.sh
#若.profile最后已加入了自启动专用程序命令行,则请在此行前面插入上述行
#简单说明:&当指定用户登录后,若当前目录中hdwarning.sh脚本存在(一般此
#时硬盘已用空间已经超标),则运行此脚本,并在屏幕显示警告信息,此时终端
#操作人员应该及时将此信息把馈给预先指定的部门或预先指定的管理人员,
#以便作相应的处理.若未超标或已清理磁盘文件并达标,则将删除脚本自身
#hdwarning.sh(取消登录时的检测和警告信息)
usedhd=80&&&&&&&&&&&&&&&#自定义超限已用硬盘空间大小比例,默认为80%
loginnum=10&&&&&&&&&&&&&#自定义最初登录反馈的用户数,默认为前&nbsp10&位
name=&运维部&&&&&&&&&&&&#接受反馈的部门或管理人员&&
tel=&2113714&nbsp2110394&&&&#接受反馈的部门或管理人员的联系方式或电话
test&&$1&&&&&nbspuserdir=$1&||&nbspuserdir=/usr/scabs&&#前台用户的目录(默认设为统版用户),也可在调用此
#脚本时加上指定前台用户的目录参数
hdwaring()
{&nbspttyname=$(tty)
echo&${ttyname##*
shell cpu====================================================================:
/proc目路下的内存文件系统映射了系统的运行时的一些信息,包括进程列表,
内存信息,CPU使用情况,还有网络等等
所以可以通过读/proc下的文件来实现统计信息的获取
但是,要注意的时不同的版本,将/proc下的每个文件中的类容会有一些差别,每一个项代表什么要自己分析,最好根据top的输出去分析
然后就可以通过shell教本或者C取得CPU使用率
我的机子是AS4(Kernel 2.6.9-5)
cat /proc/stat
cpu&&79 338
cpu0 0 839 0 49564
cpu2 4 985
cpu3 7 888 3
720 0 12 12 0 7 2 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 30 0 0 0 0 0 0 0
0 0 0 0 0 0 0
processes 603543
procs_running 1
procs_blocked 0
然后就可以自己计算了
#########GetCPU.sh
######Author:duanjigang
while true
awk&&'$1==&cpu&{Total=$2+$3+$4+$5+$6+$7;print &Free: & $5/Total*100&%
& & Used: & (Total-$5)*100/Total&%&}' &/proc/stat
#./GetCPU.sh
Free: 99.4532% Used: 0.546814%
Free: 99.4532% Used: 0.546813%
Free: 99.4532% Used: 0.546813%
Free: 99.4532% Used: 0.546813%
这样应该可以的
shell cpu MEM====================================================================:
(1):取CPU使用率
机器:LinuxAS4 2.6.9-5.ELsmp (不通版本的内核会有差异的)
#cpu.sh-to get the utilization of every cpu
#author:duanjigang&&
awk '$0 ~/cpu[0-9]/' /proc/stat&&| while read line
echo &$line& | awk '{total=$2+$3+$4+$5+$6+$7+$8;free=$5;\
& && && && && &print$1& Free &free/total*100&%&,\
& && && && && & &Used & (total-free)/total*100&%&}'
#chmod +x cpu.sh
cpu0 Free 99.7804% Used 0.219622%
cpu1 Free 99.8515% Used 0.148521%
cpu2 Free 99.6632% Used 0.336765%
cpu3 Free 99.6241% Used 0.375855%
(2)网络流量情况
#if.sh-to get the network flow of each interface
#for my beloved ning
#author:duanjigang&&
echo &name& & ByteRec& &PackRec& &ByteTran& &PackTran&
awk& &' NR&2' /proc/net/dev&&| while read line
echo &$line& | awk -F ':' '{print &&&&$1&&&& $2}' |\
& && & awk '{print $1&& &&$2 && & &$3&& &&$10&&&&$11}'
name& & ByteRec& &PackRec& &ByteTran& &PackTran
lo& &2386061& & 17568& &568
eth0& && & & &&&991835
eth1& &0& & 0& &0&&0
sit0& &0& & 0& &0&&0
(3):端口情况
http://bbs.chinaunix.net/viewthread.php?tid=864757&highlight=duanjigang
(4)至于内存
cat /proc/meminfo | grep &MemTotal&
cat /rpco/meninfo&&| grep &MemFree&
就可以了吧
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:766719次
积分:7593
积分:7593
排名:第1913名
原创:123篇
转载:35篇
评论:63条
(2)(2)(5)(8)(1)(1)(1)(1)(1)(1)(1)(4)(2)(5)(3)(12)(6)(8)(24)(26)(17)(33)

我要回帖

更多关于 jvm 查看内存占用 的文章

 

随机推荐