#coding=utf8
import time
import psutil
from pprint import pprint from logger_until import LoggerUntil
logger = LoggerUntil(name="Monitor").getlog(logfilename='Monitor.log', loglevel=2, add_StreamHandler=1) need_monitor_procces_names = [
'touna0627.py',
'dailiip.py',
'redis-server',
'mongod',
] class Monitor(object):
def __init__(self):
self.specified_process_list = self.get_specified_process() def print_all_cmd_lines(self):
pass def get_specified_process(self):
all_pids = psutil.pids()
process_list = []
for pid in all_pids:
p = psutil.Process(pid)
p_cmdline = p.cmdline()
for argx in p_cmdline:
for name in need_monitor_procces_names:
if argx.find(name) > -1:
if p.status() != 'stopped':
process_list.append(p) p_pid_set = set()
process_list2 = []
for p in process_list :
if p.pid not in p_pid_set:
process_list2.append(p)
p_pid_set.add(p.pid)
return process_list2    @staticmethod
def monitor_system():
psutil.cpu_percent()
time.sleep(1)
mem = psutil.virtual_memory() mem_total = mem.total/1000000
mem_available =mem.available/1000000
mem_percent = str(mem.percent) + '%' cpu_count = psutil.cpu_count()
cpu_percent = psutil.cpu_percent() msg = '本机总内存是:{0}M , 本机可用内存是:{1}M, 本机内存使用率是:{2}, 本机cpu核数是:{3}, 本机cpu使用率是:{4}'.format(mem_total, mem_available, mem_percent,cpu_count,cpu_percent)
logger.info(msg) def monitor_specified_process(self):
for p in self.specified_process_list:
p.cpu_percent(None)
time.sleep(1)
for p in self.specified_process_list:
#p = psutil.Process(0)
""":type :psutil.Process"""
cmdline_str =' '.join(p.cmdline()).ljust(60,' ')
p_cpu_percent_str = str(round(p.cpu_percent(),2)) +'%'
p_memory_percent_str = str(round(p.memory_percent(),2)) + '%'
p_strated_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(p.create_time()))
p_pid_str = str(p.pid)
print p.status(),str(p.status()) msg = '进程' + cmdline_str + ' 的pid是:' + p_pid_str +' cpu使用率是:' + p_cpu_percent_str + ' 内存使用率是:' + p_memory_percent_str \
+' 进程的启动时间是:' + p_strated_time logger.info(msg) def monitoring():
while 1:
monitor = Monitor()
monitor.monitor_system()
monitor.monitor_specified_process() time.sleep(10) if __name__ == "__main__":
monitoring()

监控linux的系统资源和自定义进程。

填入要监控的进程 ,只要ps -ef的command中包含need_monitor_procces_names中的字符串就可以,也可以监控java  njinx。

使用psutil库监控linux的系统资源和自定义进程的cpu 内存占用。的更多相关文章

  1. linux Java项目CPU内存占用高故障排查

    linux Java项目CPU内存占用高故障排查 top -Hp 进程号 显示进程中每个线程信息,配合jstack定位java线程运行情况 # 线程详情 jstack 线程PID # 查看堆内存中的对 ...

  2. 在Linux中通过Top运行进程查找最高内存和CPU使用率

    按内存使用情况查找前15个进程,在批处理模式下为"top" 使用top命令查看有关当前状态,系统使用情况的更详细信息:正常运行时间,负载平均值和进程总数. 分类:Linux命令操作 ...

  3. nmon监控Linux服务器系统资源

    本文转自:http://www.cnblogs.com/hyzhou/archive/2011/12/29/2305860.html 在实际的测试过程中,Loadrunner监控Linux系统资源不太 ...

  4. [C++]Linux之虚拟文件系统[/proc]中关于CPU/内存/网络/内核等的一些概要性说明

    声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神.也欢迎大家一起探讨,交流,以共同进步- 0.0 1.Linux虚拟文件系统 首先要明白 ...

  5. Qemu/Limbo/KVM镜像 最精简Linux+Wine,可运行Windows软件,内存占用不到70M,存储占用500M

    镜像特征: Alpine Edge系统 内置Wine 7.8,可运行大量Windows 软件 高度精简,内存占用仅68MB,存储占用仅500MB 完全开源 镜像说明: 用户名为root,密码为空格. ...

  6. Shell脚本监控Linux某个后台进程,当进程死掉后重新启动服务,以httpd为例

    Shell脚本如下: vim monitor.sh #!/bin/bash while true # 无限循环 flag=`ps -aux |grep "httpd" |grep ...

  7. Loadrunner 监控 Linux (centos6.5)服务器系统资源

    Loadrunner 监控 Linux 服务器系统资源,需要在被监控的服务器上启用 rstatd 进程但尝试启动时,爆炸了: [root@test1 rpc.rstatd-4.0.1]# rpc.rs ...

  8. 第6章:使用Python监控Linux系统

    1.Python编写的监控工具 1).多功能系统资源统计工具dstat dstat是一个用Python编写的多功能系统资源统计工具,用来取代Linux下的vmstat,iostat,netstat和i ...

  9. linux(centOS7)的基本操作(六) 进程管理

    进程的概念 1. 在linux系统中,每一段执行的程序都称为一个进程,被分配一个进程编号(id). 2. 每个进程都对应一个父进程,一个父进程可以复制多个子进程. 3. 一个进程可能以两种方式存在:前 ...

随机推荐

  1. Postgres创建管理员角色

    --创建角色,赋予角色属性 ' superuser createrole createdb --添加到角色组 grant postgres to batman 以上是直接创建管理员角色,如果是修改一个 ...

  2. Android—— Animation动画(很详细)

    链接: http://www.360doc.com/content/13/0102/22/6541311_257754535.shtml http://www.cnblogs.com/aimeng/a ...

  3. 在Word 2007中添加参考文献及其引用的方法

    以前写文章的时候忽略了在文章中添加参考文献及其引用的方式,文章各式显得不太正式,在网上进行了相关搜索,将方法整理如下: 1.将光标停留在需要插入文献的地方[1],选择菜单栏上的"引用 -&g ...

  4. docker监控

    [编者的话]这篇文章作者是Usman,他是服务器和基础架构工程师,有非常丰富的分布式构建经验.该篇文章主要分析评估了五种Docker监控工具,包括免费的和不免费的:Docker Stats.CAdvi ...

  5. SQLServer 错误: 15404,无法获取有关 Windows NT 组

    右击-属性-所有者改成sa 测试一下   右击 --- 作业开始步骤---执行成功

  6. Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐

    http://blog.csdn.net/lc0817/article/details/53266212/ https://github.com/leoChaoGlut/log-sys 上面是我基于S ...

  7. SQLite 日期 & 时间

    具体看http://www.runoob.com/sqlite/sqlite-date-time.html 不过实例介绍的不够详细,以下详细举例: SQLite包含了如下时间/日期函数:datetim ...

  8. FreeRDP的安装配置(错误信息:SSL_read: Failure in SSL library (protocol error?))

    最新文章:Virson's Blog 使用xfreerdp [serveripaddress]命令,连接xp/windows 2003都正常,但是在连接win7/2008时总是出错: ;------- ...

  9. 关于”nodejs基于事件驱动”的思考

    刚想通是怎么回事. 以页面上的js为例,你可以给多个标签注册事件回调,然而,无论给 多少个标签 注册 多少个事件回调,这些回调都只会等待自己命中注定的那个事件,在执行上都不会彼此影响!!! 再想一下w ...

  10. Linux 安装 MongoDB数据库

    1下载: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.7.tgz (下载较慢) 2.安装: mv mongodb-li ...