# 监控虚拟机内存,线程,类等脚本实例
**简介:**
以下脚本功能为监控某虚拟机进程的内存、线程、类和启动配置等并记录到对应的日志文件里。
**注意事项:**
1. 请先更改代码区的虚拟机名字、日志存放的路径和jdk的路径等参数。
2. 请将以下代码写入一个.sh文件,该文件可直接执行(不会持续记录)也可定时执行(有关Linux定时任务设置请查看本书的章节:Linux定时任务)。
~~~
#!/bin/bash
###############程序区################
#注意:在执行此程序前请先确认需要监控的虚拟机名称(jvmname)和jdk安装路径(jdkpath)!
#此命令可查看当前服务器所有运行的虚拟机: jps
jvmname=Main #要监控的虚拟机的名字
logpath=/root/Desktop #日志存放的路径
#jdkpath=$(echo $JAVA_HOME | awk '{print $1}')
#jdkpath=$(which java)
#jdkpath=${jdkpath%/*}
jdkpath=/usr/JDK/jdk1.7.0_79/bin #jdk的路径
#拿到进程ID并赋给变量
pid=$($jdkpath/jps | grep $jvmname | awk '{print $1}')
#查看指定java程序内存使用情况(需要定时)
date >>/root/Desktop/heap.log
$jdkpath/jmap -heap $pid >>$logpath/heap.log
#输出类的装载卸载总空间等情况(可以定时)
date >>/root/Desktop/class.log
$jdkpath/jstat -class $pid >>$logpath/class.log
#查看Java的配置信息(需要定时)
date >>/root/Desktop/flag.log
$jdkpath/jinfo -flags $pid >>$logpath/flag.log
#查看指定虚拟机的线程情况(需要定时)
date >>/root/Desktop/thread.log
$jdkpath/jstack -F $pid >>$logpath/thread.log
###############-笔记#################
#查看指定java程序cpu使用情况 top -p pid -H
#查看指定java程序内存使用情况 jmap -heap 12733
#1.jps | grep '查找字符串'(写的时候去掉单引号)
#2.ctrl+c可以终止程序运行
#3.监控java线程数:
#ps -eLf | grep java | wc -l
#4.监控网络客户连接数:
#netstat -n | grep tcp | grep 侦听端口 | wc -l
#5.less 文件名 查看文件
#6.ctrl+z 可以退出正在阅读的文件以及正在运行的程序
#7.赋值语法
#aaa=$(命令)
#8.杀死指定的进程(名字)
#jps | grep 名字 | grep -v grep | awk '{print "kill -9 "$1}' | sh
#9.
#
~~~