(由于春节期间连不上服务器,但又不知道是不是服务器关机了,因此写一个心跳检测功能遇到问题时可以排查部分原因)

具体来说分为客户端和服务端,客户端为校园服务器,服务端为我们自己搭建的http服务器。客户端每k秒钟发送包含CPU利用率、内存使用情况等的心跳包给服务端,由服务端接收和保存分析。(代码在下面)

过程中遇到的问题

1.使用top命令获取系统资源占用情况,获取的结果是带有格式的,

如上图例如数字加粗了,导致得到的结果中带有许多格式信息,使用正则表达式提取数字会得到许多多余的数字。因此改用了vmstat命令。另外,如果不用正则表达式,而是通过切片的方式获取目标数值也是一种方法。

还有一种方法是将print输出后的结果赋值给变量,然后再通过正则表达式匹配数字。赋值方法https://blog.csdn.net/manmanpa/article/details/56479273

(使用vmstat命令发现了另一个问题,第一次得到的id数值永远都很大)

2.不同命令得到的CPU占用率结果不同

3. 最终使用python 的 psutil 库来获取资源占用情况,代替下面客户端代码中的相应部分

class MySend:
def send_info(self):
'''获取当前时间'''
current_time=str(datetime.now()) cpu_usage=psutil.cpu_percent(1) #通过时间间隔1s 获取cpu利用率 memory_usage=psutil.virtual_memory().percent dict_trans={'current_time':current_time,'cpu_use_ratio':cpu_usage,'memory_ratio':memory_usage}
json_trans=json.dumps(dict_trans)
'''传输json串,用requests'''
response=requests.post(url='http:/...',data=json_trans)

客户端

功能:每k秒钟向服务端发送心跳包。实现:python

代码:

import subprocess
import json
import requests
from threading import Timer
from datetime import datetime
import re class MySend:
def send_info(self):
'''获取当前时间'''
current_time=str(datetime.now())
cmd1='vmstat'
ret=subprocess.run(cmd1, shell=True, capture_output=True, encoding='utf-8')
s=ret.stdout
value_ret=re.findall(r"\d+\.?\d*",s)
cpu_use_ratio=100-float(value_ret[-3]) mem_total='grep MemTotal /proc/meminfo'
mem_ret=subprocess.run(mem_total, shell=True, capture_output=True, encoding='utf-8')
total_mem=re.findall(r"\d+\.?\d*",mem_ret.stdout)
total_mem=float(total_mem[0])/1024.0 cmd1='vmstat'
ret=subprocess.run(cmd1, shell=True, capture_output=True, encoding='utf-8')
s=ret.stdout
value_ret=re.findall(r"\d+\.?\d*",s)
memory_ratio=(total_mem-float(value_ret[3])/1024.0)/total_mem*100 dict_trans={'current_time':current_time,'cpu_use_ratio':cpu_use_ratio,'memory_ratio':memory_ratio}
json_trans=json.dumps(dict_trans)
'''传输json串,用requests'''
response=requests.post(url='http:/......../',data=json_trans) class MyTimer():
def __init__(self, start_time, interval, program):
self.__timer=None
self.__start_time=start_time
self.__interval=interval
self.__program=program def exec_program(self):
# print(1)
self.__program()
self.__timer=Timer(self.__interval,self.exec_program) #用于执行等待的时间,要执行的方法
self.__timer.start() def start(self):
#中止时间减去已经进行了多少时间 (现在的时间减去起始的时间)
interval=self.__interval-(datetime.now().timestamp()-self.__start_time.timestamp())
self.__timer=Timer(interval,self.exec_program) #用于执行等待的时间,要执行的方法
self.__timer.start() #开始才能执行上一个语句
def cancel(self):
self.__timer.cancel()
self.__timer=None if __name__=='__main__':
send=MySend()
start=datetime.now()
tmr=MyTimer(start,5,send.send_info) #每五秒钟发送一次
tmr.start()

定时方法参考了https://www.zhiu.cn/54667.html

 服务端:接收并保存分析客户端发来的心跳包。实现:Django

代码:服务端的代码完善后放到github  一个简单的代码

以上为个人学习心得,如有问题请指出

对服务器进行心跳检测 python django的更多相关文章

  1. EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离~再续~添加对各只读服务器的心跳检测

    回到目录 上一讲中基本实现了对数据库的读写分离,而在选择只读数据库上只是随机选择,并没有去检测数据库服务器是否有效,如服务器挂了,SQL服务停了,端口被封了等等,而本讲主要对以上功能进行一个实现,并对 ...

  2. wifidog源码分析 - 认证服务器心跳检测线程

    引言 但wifidog启动时,会自动启动认证服务器心跳检测线程,此线程默认每隔60s与认证服务器交互一次,会将路由器的信息(系统启动时长,内存使用情况和系统平均负载)告知认证服务器,并通过一个&quo ...

  3. [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)

    1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py   1. ...

  4. Python Django(WEB电商项目构建)

    (坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ...

  5. Python Django框架笔记(一):安装及创建项目

     #推荐一本书<Python核心编程>(适合有一定基础的),美国人Wesley Chun编写的,京东.淘宝应该都有.我是觉得写的很好,详细.简洁.满满的干货,不像有的书整本看完也没什么用. ...

  6. python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

    python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...

  7. python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器

    python3.5 manage.py runserver python Django教程 之模板渲染.循环.条件判断.常用的标签.过滤器 一.Django模板渲染模板 1. 创建一个 zqxt_tm ...

  8. python Django教程 之 安装、基本命令、视图与网站

    python  Django教程  之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...

  9. web双机热备添加心跳检测ip的时候填了网关导致外网ip不能上网

    web双机热备添加心跳检测ip的时候填了网关导致外网ip不能上网 1 连接 机器其他机器, 通过机房做的服务器的局域网,ssh到这台的局域网ip,删除网卡配置文件的网关哪一行,重启网卡. 2 如果没有 ...

  10. Python+Django+Eclipse 在Windows下快速开发自己的网站

    一.配置开发环境 我的开发环境是:Python3.3.2 + Django1.5.2 + Eclipse 1.安装Python 下载地址:http://www.python.org/getit/ 安装 ...

随机推荐

  1. 持续发烧,聊聊Dart语言的静态编译,能挑战Go不?

    前言 前两天写了几篇文章,谈了谈Dart做后端开发的优势,比如: <Dart开发服务端,我是不是发烧(骚)了?> <持续发烧,试试Dart语言的异步操作,效率提升500%> & ...

  2. day06-Vue03

    Vue03 10.组件化编程 10.1基本说明 官网链接:https://v2.cn.vuejs.org/v2/guide/components-registration.html 在大型应用开发时, ...

  3. P7914 [CSP-S 2021] 括号序列

    简要题意 给定 \(k\),定义 "超级括号序列"(简称括号序列,下同) 字符串为: 仅由 ( ) * 三种字符组成. 下面令 \(S\) 为不超过 \(k\) 个 \(\ast\ ...

  4. 【LeetCode链表#9】图解:两两交换链表节点

    两两交换链表中的节点 力扣题目链接(opens new window) 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 思路 ...

  5. flutter Error:Cannot run with sound null safety, because the following dependencies don't support

    学习flutter新版本的路上,真的是一天一个新惊喜啊 今天遇到的坑是 Flutter 升级高版本后,运行和build 报错 Error: Cannot run with sound null saf ...

  6. VUE assets里的scss没有引用会被打包进代码里,本地代码和打包后的代码样式不一致解决办法

    1.打包部署后,发现样式和本地运行时候代码不一致 经过排查发现 这个路径的文件被打包进去了,但是我并没有引用这个文件啊啊啊啊啊a~~~~ src\assets\webgl-assets\scss\st ...

  7. Avalonia 实现动态托盘

    先下载一个gif图片,这里提供一个gif图片示例 在线GIF图片帧拆分工具 - UU在线工具 (uutool.cn) 使用这个网站将gif切成单张图片 创建一个Avalonia MVVM的项目,将图片 ...

  8. 如何用Python实现http客户端和服务器

    功能:客户端可以向服务器发送get,post等请求,而服务器端可以接收这些请求,并返回给客户端消息. 客户端: #coding=utf-8import http.clientfrom urllib i ...

  9. KStudio-Java程序连接KingbaseES数据库异常

    错误信息: --KStudio客户端工具错误信息 The conncetion attempt failed.Reason:connect time out --Java应用程序控制台日志 Cause ...

  10. PopClip使用教程图文详解 2022.12亲测有效

    PopClip简介 PopClip mac版是Macos上一款增强型复制粘贴工具,当你选中文字后,PopClip会自动弹出复制.剪切.粘贴.搜索等等操作,除了复制粘贴外,PopClip还提供了很多的扩 ...