监控linux服务器
监控linux服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | "" " 内存监控 "" " def memory_stat(): mem = {} f = open( '/proc/meminfo' , 'r' ) lines = f.readlines() f.close() for line in lines: if len(line) < 2: continue name = line.split( ':' )[0] var = line.split( ':' )[1].split()[0] mem[name] = float ( var ) mem[ 'MemUsed' ] = mem[ 'MemTotal' ] - mem[ 'MemFree' ] - mem[ 'Buffers' ] - mem[ 'Cached' ] #记录内存使用率 已使用 总内存和缓存大小 res = {} res[ 'percent' ] = int (round(mem[ 'MemUsed' ] / mem[ 'MemTotal' ] * 100)) res[ 'used' ] = round(mem[ 'MemUsed' ] / (1024 * 1024), 2) res[ 'MemTotal' ] = round(mem[ 'MemTotal' ] / (1024 * 1024), 2) res[ 'Buffers' ] = round(mem[ 'Buffers' ] / (1024 * 1024), 2) return res |
0.00 0.01 0.05 1/128 9424
简单说明一下每个字段的含义,前三个参数分别为1、5、15分钟内cpu的平均负载,第四个参数为正在运行的进程数和总进程数,最后一个代表最近活跃的进程ID
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | "" " CPU负载监控 "" " def load_stat(): loadavg = {} f = open( "/proc/loadavg" ) con = f.read().split() f.close() loadavg[ 'lavg_1' ]=con[0] loadavg[ 'lavg_5' ]=con[1] loadavg[ 'lavg_15' ]=con[2] loadavg[ 'nr' ]=con[3] prosess_list = loadavg[ 'nr' ].split( '/' ) loadavg[ 'running_prosess' ]=prosess_list[0] loadavg[ 'total_prosess' ]=prosess_list[1] loadavg[ 'last_pid' ]=con[4] return loadavg |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import os '' ' os.statvfs方法用于返回包含文件描述符fd的文件的文件系统的信息。 语法:os.statvfs([path]) 返回值 f_bsize: 文件系统块大小 f_frsize: 分栈大小 f_blocks: 文件系统数据块总数 f_bfree: 可用块数 f_bavail:非超级用户可获取的块数 f_files: 文件结点总数 f_ffree: 可用文件结点数 f_favail: 非超级用户的可用文件结点数 f_fsid: 文件系统标识 ID f_flag: 挂载标记 f_namemax: 最大文件长度 '' ' def disk_stat(): hd={} disk = os.statvfs( '/' ) hd[ 'available' ] = float (disk.f_bsize * disk.f_bavail) hd[ 'capacity' ] = float (disk.f_bsize * disk.f_blocks) hd[ 'used' ] = float ((disk.f_blocks - disk.f_bfree) * disk.f_frsize) res = {} res[ 'used' ] = round(hd[ 'used' ] / (1024 * 1024 * 1024), 2) res[ 'capacity' ] = round(hd[ 'capacity' ] / (1024 * 1024 * 1024), 2) res[ 'available' ] = res[ 'capacity' ] - res[ 'used' ] res[ 'percent' ] = int (round( float (res[ 'used' ]) / res[ 'capacity' ] * 100)) return res |
在一个服务器上,可能有多块网卡, 在获取网卡信息时,你需要传入网卡的名字,具体有哪些网卡,可以使用ifconfig
命令查看
1 2 3 4 5 6 7 8 | "" " 获取当前服务器ip "" " def get_ip(ifname): import socket import fcntl import struct s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, struct .pack( '256s' , ifname[:15]))[20:24]) |
我们将会从该文件中获得系统的网络接口,以及当系统重启之后通过它们数据发送和接受数据的信息。 /proc/net/dev文件让这些信息可用。如果你检查了这个文件的内容,你就会注意到头一两行包含了头信息等等,这个文件第一列是网络接口名,第二和第三列显示了接收和发送的字节数信息(例如总发送字节数,包数,错误等等)。这里我们所感兴趣的就是他哦难过不同的网络设备提取出总发送数据和接收数据。下面的代码展示了怎么从/proc/net/dev文件中提取出这些信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/usr/bin/env python from __future__ import print_function def net_stat(): net = {} f = open( "/proc/net/dev" ) lines = f.readlines() f.close for line in lines[2:]: line = line.split( ":" ) eth_name = line[0].strip() if eth_name != 'lo' : net_io = {} net_io[ 'receive' ] = round( float (line[1].split()[0]) / (1024.0 * 1024.0),2) net_io[ 'transmit' ] = round( float (line[1].split()[8]) / (1024.0 * 1024.0),2) net[eth_name] = net_io return net if __name__ == '__main__' : netdevs = net_stat() print(netdevs) |
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/14499661.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2017-03-08 cxgrid的FINDPANEL编程