学习使用Python都有一段时间了,总是感觉基础的东西学到了点,但是真搞起项目来还没有头绪,都说读万卷书不如行万里路。说到底还是要实战。
本次仅简单记录在Python3下获取系统Centos7的内存使用率并写入Mysql数据库中。
由于Centos7和6的系统变化挻大的,所以先看看Centos7的内存信息是怎么样的。
系统版本:
[root@pydev]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
查看内存信息:其实只需要关注前7行即可;
[root@pydev ~]# cat /proc/meminfo |head -7
MemTotal: 2041468 kB
MemFree: 1669968 kB
MemAvailable: 1780008 kB
Buffers: 948 kB
Cached: 211100 kB
SwapCached: 0 kB
Active: 97692 kB
内存使用率的计算:mem_used=MemTotal-MemFree-Buffers
或者这样看吧;
[root@pydev ~]# free -m
total used free shared buff/cache available
Mem: 1993 99 1630 8 263 1738
Swap: 2047 0 2047
python 代码:
#/usr/bin/env python3
import time
import pymysql as mysql
db = mysql.connect(user='dba',passwd='123456',db='memory',host='localhost')
db.autocommit(True)
cur = db.cursor()
def getMem():
f = open('/proc/meminfo')
total = int(f.readline().split()[1])
free = int(f.readline().split()[1])
MemAvailable = f.readline().split()
cache = int(f.readline().split()[1])
mem_use = total-free-cache
t = time.time()
sql = 'insert into memory(memory,time) values(%s,%s)' %(mem_use/1024,t)
cur.execute(sql)
#print mem_use
print ('ok')
while True:
time.sleep(1)
getMem()
每隔一秒就会打印一个ok到终端,然后在Mysql里查询一下;
root@memory 02:15:15>select * from memory limit 5;
+--------+------------+
| memory | time |
+--------+------------+
| 447596 | 1495445163 |
| 447720 | 1495445164 |
| 447720 | 1495445165 |
| 447720 | 1495445166 |
| 447720 | 1495445167 |
+--------+------------+
5 rows in set (0.00 sec)
Mysql的表只用了两个字段,一个内存使用率,这个值是以兆为单位的,另一个就是时间了。
root@memory 02:19:23>show create table memory\G
*************************** 1. row ***************************
Table: memory
Create Table: CREATE TABLE `memory` (
`memory` int(11) DEFAULT NULL,
`time` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)