封尘网

让学习成为一种习惯!

python 获取centos7的内存使用率并写入mysql

学习使用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)