python监听windows上w3wp进程,如果cpu>=95%则自动kill掉

因为最近服务器前端虽然加了负载均衡,但是后端windows主机偶尔还有因为服务进程cpu到99这种情况导致服务不可用,虽然这个不用第一时间处理,但是也需要手工登录进行进程的kill,windows下可以通过dos脚本写个.bat脚本实现这个功能,并通过配置调用这个.bat脚本,但是我试过几次感觉不太适合我

所以通过python写一个脚本并用py2exe转换成.exe程序放在几台windows上,因为不可能每台server都手工部署下python环境。

代码如下:

import psutil

import smtplib

import socket,time

from email.mime.text import MIMEText

mailto_list=[‘[email protected]‘]

hostname=socket.gethostname()

subject=hostname+‘服务器‘+‘ w3wp进程Cpu占比大于95%‘

#监听w3wp的进程cpu占比并杀进程功能函数

def moniter_w3wp():

for proc in psutil.process_iter(): #通过迭代器遍历进程

try:

if proc.name()==‘w3wp.exe‘ and proc.cpu_percent(interval=2)/24>=95:

cpu_threshold=proc.cpu_percent(interval=2)/24 #此处需要除以处理cpu的核心个数

proc_name=proc.name()

c_percent=cpu_threshold

s_cpu_percent=str(c_percent)

#print u"Process Name: %s,CPU Use Percent: %s %%" % (proc_name,c_percent)

#print c_percent

proc.kill()

return s_cpu_percent

except psutil.NoSuchProcess:

pass

#else:

#print ‘no process need to kill‘

#发送邮件函数

def send_mail(to_list,sub,content):

me="[email protected]"

msg = MIMEText(content,_subtype=‘plain‘,_charset=‘gb2312‘)

msg[‘Subject‘] = sub

msg[‘From‘] = me

msg[‘To‘] = ";".join(to_list)

try:

server = smtplib.SMTP(‘localhost‘) #因为每台服务器开了smtp邮件服务,所以此处调用本地地址,因为我用qq作为smtp会有ssl验证的错误信息,还需要配置,所以就没用qq

server.sendmail(me, to_list, msg.as_string())

server.close()

return True

except Exception, e:

print str(e)

return False

if __name__==‘__main__‘:

while(1):

time.sleep(1)

Bkvalue=moniter_w3wp()

if Bkvalue>=‘95‘:

#print "back value: %s" % Bkvalue

Now_CpuValue=Bkvalue

EmailContent=hostname+‘服务器‘+‘ w3wp进程Cpu大于95%,已经被自动Kill掉;‘+‘ now Cpu:‘+Now_CpuValue

#print EmailContent

if send_mail(mailto_list,subject,EmailContent):

print ‘邮件已经发送给管理人员!‘

else:

print ‘邮件信息发送失败!‘

##      else:

##        print ‘w3wp进程cpu状态正常!‘

将以上脚本定义为windows_monitor_cpu_killer.py文件

然后新建用于编译的文件 setup_py2exe.py 内容如下:

##py2exe需要提前下载,下载地址:https://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/

from distutils.core import setup

import py2exe

setup(windows=["windows_monitor_cpu_killer.py"]) windows gui也可以变成console

关于这块配置的解释可以看help(py2exe)的详细信息,截取片段如下:

脚本本地测试通过后,将.py转换为.exe

如果你本机是windows系统dos切换到.py文件所在目录下 执行python setup_py2exe.py py2exe

执行后会生成两个文件夹 dist文件夹和build文件夹,将dist文件夹copy到你需要监控的服务器主机,执行其中的.exe文件即可。

文章参考相关链接地址:

http://www.cnblogs.com/dplearning/p/5082074.html

http://tony413.iteye.com/blog/395177

http://blog.csdn.net/xm1331305/article/details/8129244

http://www.jianshu.com/p/64e265f663f6

时间: 2024-10-18 14:56:08

python监听windows上w3wp进程,如果cpu>=95%则自动kill掉的相关文章

好记性不如烂笔头35-java监听windows窗口事件Listener(2)

java监听windows窗口事件,现在几乎用的很少了. 当初我还在大学求学的时候,刚开始学习JAVA,对于它监听windows窗口事件,其实花费了非常多的精力.自己不是一个很机灵的人,很多的概念怎么看也不是很明白,很多的逻辑只能靠死记硬背,很多的概念记住了很快又忘记了- 当年的JAVA,还是没有放弃桌面应用这个领域,这些年过去了,java在PC的桌面应用上几乎是一败涂地,倒是在互联网和移动设备上大放光彩,至少这些,是我当初学习的时候不曾想到的. 这种类似的功能,现在几乎已经基本没有了用武之地.

云计算之路-阿里云上:消灭“黑色n秒”第二招——给w3wp进程指定CPU核

虽然昨天的第一招失败了,但是从失败中我们学到了与多核CPU相关的Processor Affinity(处理器关联)的知识. 既然我们可以让.NET程序的不同线程运行于指定的CPU核,那是不是也可以让IIS应用程序池的进程w3wp运行于指定的CPU核? 虽然看起来"黑色n秒"似乎与w3wp运行于哪些CPU核没有什么关系,但是我们既然把怀疑对象锁定在CPU,那么任何与CPU相关的线索都不能放过.即使失败,也会满载而归,因为如果没有"黑色n秒"这个问题的驱动,我们根本不会

(转)mac 下使用wireshark监听网络上的数据

mac 下使用wireshark监听网络上的数据 分三个步骤: 1.wireshark安装 wireshark运行需要mac上安装X11,mac 10.8的系统上默认是没有X11的.先去http://xquartz.macosforge.org/landing/下载最新的 xquartz安装,安装好就有X11了. wireshark的下载,网上有很多下载源.官网试了几次,没打开的成.可以考虑去华军之类的网站上下载. 2.打开网卡,允许wireshark访问 安装好xquartz和wireshar

WPF监听Windows会话

当一个用户关闭Windows或者机器的时候,WPF可以监听到其事件并可以发出警告.事件名称为Application.SessionEnding,在用户注销和关机时触发. 通过设置SessionEndingCancelEventArgs.Cancel 为true,可以阻止其注销/关机行为: 1 private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e) 2 { 3 MessageBoxR

使用python监听、模拟鼠标键盘事件

最近守望职业选手疑似开挂事件挺热闹的,在下小菜一枚,并不能从视频中看出端倪.看了一些关于外挂的讨论,自动点射和压枪只需在鼠标驱动上做些改动即可,自瞄或其他高级功能则需要读内存或修改游戏文件,检测也更容易. 士兵76长按左键扫射4发子弹之后准星就会小范围随机飘,所以想自己实现一个长按左键变自动点射的程序. 仅作测试使用,鄙视一切外挂,玩游戏就好好玩. 选择使用python,用到的库pyHook,pywin32 pyHook的文档:http://pyhook.sourceforge.net/doc_

【python安装】Windows上安装和创建python开发环境

1. 在 windows10 上安装python开发环境 Linux和Mac OS都自带python环境,但是Windows没有,需要自行安装. 第1步:访问 python官网,下载Windows平台下的安装包 地址:https://www.python.org/downloads/ 选择下载3.X的版本,我选择的是3.6.6的版本 双击下载完的文件python-3.6.6-amd64.exe,进入安装环节,按步骤完成安装.(我选的第一个Install Now默认安装.) 第2步:设置环境变量.

Python基础知识——Windows上使用python

与大多数Unix系统和服务不同,Windows不需要Python本地,因此不预安装一个版本的Python.但是,CPython团队已经为每个版本编译Windows安装程序(MSI软件包)多年. 随着Python的不断发展,一些以前被支持的平台不再受支持(由于缺乏用户或开发人员).检查PEP 11有关所有不受支持的平台的详细信息. 仍然支持Windows CE. 在Cygwin的安装程序提供安装Python解释器,以及(参见Cygwin包的源,维护者的版本) 有关 具有预编译安装程序的平台的详细信

python 监听端口

/tmp/fof_portfolio_optimization/initialise data 组合优化里面python目录 执行python3 initialise.py 初始化组合优化数据 执行之前需要先修改/tmp/fof_portfolio_optimization/public 下面connect数据库ip地址 然后修改/tmp/fof_portfolio_optimization/calculate 目录下面的 optimization_model_api 监听ip和端口信息,然后运

python print 在windows上 出现 Bad file descriptor error

先说一下情况,一个python写的采集程序,做成windows服务在windows上运行. 这个问题出现的挺奇特,本来一套采集程序,一个采集文件的时候没问题,两个采集文件的时候也没问题,当三个采集文件的时候,就报错了. 错误:IOError: (9, 'Bad file descriptor') 我还以为是代码有问题了,最终调试了下,发现是print的问题,   原文地址:https://www.cnblogs.com/sdadx/p/10043803.html