国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python10min手寫(xiě)一個(gè)服務(wù)器內(nèi)存監(jiān)控系統(tǒng)

sunsmell / 1644人閱讀

簡(jiǎn)易的內(nèi)存監(jiān)控系統(tǒng)

本文需要有一定的python和前端基礎(chǔ),如果沒(méi)基礎(chǔ)的,請(qǐng)關(guān)注我后續(xù)的基礎(chǔ)教程系列博客

文章源地址,還可以看到具體的代碼,喜歡請(qǐng)加個(gè)星星

騰訊視頻鏈接

錄制中間網(wǎng)出問(wèn)題了,重啟了一下,所以有兩部分

視頻1

視頻2

本文的目的在于,盡可能用簡(jiǎn)單的代碼,讓大家了解內(nèi)存監(jiān)控的原理
主題思路

獲取內(nèi)存信息

存儲(chǔ)信息

展現(xiàn)

后續(xù)擴(kuò)展

加主機(jī)名,monitor部署在多臺(tái)機(jī)器,不直接插數(shù)據(jù)庫(kù)

通過(guò)http請(qǐng)求的方式,一臺(tái)機(jī)器起flask專門(mén)存數(shù)據(jù)monitor

思路圖

第一步,我們需要獲取內(nèi)存信息

其實(shí)所有的監(jiān)控項(xiàng),包括內(nèi)存數(shù)據(jù),都是從文件中讀取的,大家執(zhí)行以下 cat /proc/meminfo就可以看到關(guān)于內(nèi)存的信息,我們關(guān)注的是前四行,總內(nèi)存,空閑內(nèi)存,緩沖和緩存大小

計(jì)算內(nèi)存占用量公式:

(總內(nèi)存-空閑內(nèi)存-緩沖-緩存)/1024Mb

代碼呼之欲出 monitor.py

用with打開(kāi)文件,可以自動(dòng)關(guān)閉,比直接open優(yōu)雅那么一丟丟

def getMem():
    with open("/proc/meminfo") as f:
        total = int(f.readline().split()[1])
        free = int(f.readline().split()[1])
        buffers = int(f.readline().split()[1])
        cache = int(f.readline().split()[1])
    mem_use = total-free-buffers-cache
    print mem_use/1024
while True:
    time.sleep(1)
    getMem()

執(zhí)行文件 python monitor.py,每一秒打印一條內(nèi)存信息

[woniu@teach memory]$ python mointor.py 
2920
2919
2919
2919
2919

我們可以寫(xiě)個(gè)很搓的測(cè)試代碼,占用一點(diǎn)內(nèi)存,看看數(shù)據(jù)會(huì)不會(huì)變
執(zhí)行下面代碼,能看到內(nèi)存使用量明顯多了幾M

# test.py

s = "akdsakjhdjkashdjkhasjkdhasjkdhkjashdaskjhfoopnnm,ioqouiew"*100000

for i in s:
    for j in s:
        s.count(j)                 

獲取內(nèi)存數(shù)據(jù)done!

第二步存儲(chǔ)數(shù)據(jù)庫(kù) 我們選用mysql

新建表格,我們需要兩個(gè)字段,內(nèi)存和時(shí)間 sql呼之欲出,簡(jiǎn)單粗暴

create memory(memory int,time int)

我們的 monitor.py就不能只打印內(nèi)存信息了,要存儲(chǔ)數(shù)據(jù)庫(kù)啦,引入mysql模塊,代碼如下

import time
import MySQLdb as mysql

db = mysql.connect(user="reboot",passwd="reboot123",db="memory",host="localhost")
db.autocommit(True)
cur = db.cursor()

def getMem():
    with open("/proc/meminfo") as f:
        total = int(f.readline().split()[1])
        free = int(f.readline().split()[1])
        buffers = int(f.readline().split()[1])
        cache = int(f.readline().split()[1])
    mem_use = total-free-buffers-cache
    t = int(time.time())
    sql = "insert into memory (memory,time) value (%s,%s)"%(mem_use/1024,t)
    cur.execute(sql)
    print mem_use/1024
    #print "ok"
while True:
    time.sleep(1)
    getMem()

比之前的多了拼接sql和執(zhí)行的步驟,具體過(guò)程見(jiàn)視頻,大家到數(shù)據(jù)庫(kù)里執(zhí)行一下下面的sql,就能看到我們辛辛苦苦獲取的內(nèi)存數(shù)據(jù)啦

    select * from memory

我們的數(shù)據(jù)庫(kù)里數(shù)據(jù)越來(lái)越多,怎么展示呢

我們需要flask
我們看下文件結(jié)構(gòu)

.
├── flask_web.py web后端代碼
├── mointor.py 監(jiān)控?cái)?shù)據(jù)獲取
├── static 靜態(tài)文件,第三方圖表庫(kù)
│?? ├── exporting.js
│?? ├── highstock.js
│?? └── jquery.js
├── templates
│?? └── index.html 展示前端頁(yè)面
└── test.py 占用內(nèi)存的測(cè)試代碼

flask_web就是我們的web服務(wù)代碼,template下面的html,就是前端展示的文件,static下面是第三方庫(kù)

flask_web的代碼如下

提供兩個(gè)路由

根目錄渲染文件index.html

/data路由去數(shù)據(jù)庫(kù)插數(shù)據(jù),返回json,供畫(huà)圖使用

from flask import Flask,render_template,request
import MySQLdb as mysql

con = mysql.connect(user="reboot",passwd="reboot123",host="localhost",db="memory")

con.autocommit(True)
cur = con.cursor()
app = Flask(__name__)
import json

@app.route("/")
def index():
    return render_template("index.html")

@app.route("/data")
def data():
    sql = "select * from memory"
    cur.execute(sql)
    arr = []
    for i in cur.fetchall():
        arr.append([i[1]*1000,i[0]])
    return json.dumps(arr)

if __name__=="__main__":
    app.run(host="0.0.0.0",port=9092,debug=True)

前端index.html
highstock的demo頁(yè)面,copy過(guò)來(lái),具體過(guò)程見(jiàn)視頻



51reboot



hello world

具體觀察數(shù)據(jù)結(jié)構(gòu)的過(guò)程,見(jiàn)視頻和demo鏈接,我們做的 就是把數(shù)據(jù)庫(kù)里的數(shù)據(jù),拼接成前端畫(huà)圖需要的數(shù)據(jù),展現(xiàn)出來(lái)

這時(shí)候前端就能看到圖表啦

我們并不僅限于此,如果想實(shí)時(shí)的看到內(nèi)存,應(yīng)該怎么搞呢

查詢數(shù)據(jù)時(shí)候增加一個(gè)時(shí)間戳當(dāng)限制條件,再次查詢時(shí),只返回兩次查詢之間的增量數(shù)據(jù)

前端動(dòng)態(tài)添加增量結(jié)點(diǎn)數(shù)據(jù)到圖表中

代碼呼之欲出

python

tmp_time = 0

@app.route("/data")
def data():
    global tmp_time
    if tmp_time>0:
        sql = "select * from memory where time>%s" % (tmp_time/1000)
    else:
        sql = "select * from memory"
    cur.execute(sql)
    arr = []
    for i in cur.fetchall():
        arr.append([i[1]*1000,i[0]])
    if len(arr)>0:
        tmp_time = arr[-1][0]
    return json.dumps(arr)

前端,3秒查一次增量數(shù)據(jù)

    $.getJSON("/data", function (data) {

        // Create the chart
        $("#container").highcharts("StockChart", {
        chart:{
        events:{
            load:function(){
                var series = this.series[0]
                setInterval(function(){
                $.getJSON("/data",function(res){
                    $.each(res,function(i,v){
                        series.addPoint(v)
                    })
                })
                },3000)
            }
        }
        },
            rangeSelector : {
                selected : 1
            },
            title : {
                text : "AAPL Stock Price"
            },
            series : [{
                name : "AAPL",
                data : data,
                tooltip: {
                    valueDecimals: 2
                }
            }]
        });
    });

done!兩個(gè)文件都搞定,double kill!
效果

最終代碼直接下載那個(gè)木看也行

監(jiān)控文件monitor.py

import time
import MySQLdb as mysql

db = mysql.connect(user="reboot",passwd="reboot123",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])
    buffers = int(f.readline().split()[1])
    cache = int(f.readline().split()[1])
    mem_use = total-free-buffers-cache
    t = int(time.time())
    sql = "insert into memory (memory,time) value (%s,%s)"%(mem_use/1024,t)
    cur.execute(sql)
    print mem_use/1024
    #print "ok"
while True:
    time.sleep(1)
    getMem()

flask

from flask import Flask,render_template,request
import MySQLdb as mysql

con = mysql.connect(user="reboot",passwd="reboot123",host="localhost",db="memory")
con.autocommit(True)
cur = con.cursor()
app = Flask(__name__)
import json

@app.route("/")
def index():
    return render_template("index.html")

tmp_time = 0

@app.route("/data")
def data():
    global tmp_time
    if tmp_time>0:
        sql = "select * from memory where time>%s" % (tmp_time/1000)
    else:
        sql = "select * from memory"
    cur.execute(sql)
    arr = []
    for i in cur.fetchall():
        arr.append([i[1]*1000,i[0]])
    if len(arr)>0:
        tmp_time = arr[-1][0]
    return json.dumps(arr)

if __name__=="__main__":
    app.run(host="0.0.0.0",port=9092,debug=True)

前端



51reboot




hello world

代碼沒(méi)有特別注意細(xì)節(jié),希望大家喜歡。

歡迎大家關(guān)注個(gè)人公共號(hào),高品質(zhì)運(yùn)維開(kāi)發(fā)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91560.html

相關(guān)文章

  • python10min手寫(xiě)一個(gè)務(wù)器內(nèi)存監(jiān)控系統(tǒng)

    簡(jiǎn)易的內(nèi)存監(jiān)控系統(tǒng) 本文需要有一定的python和前端基礎(chǔ),如果沒(méi)基礎(chǔ)的,請(qǐng)關(guān)注我后續(xù)的基礎(chǔ)教程系列博客 文章源地址,還可以看到具體的代碼,喜歡請(qǐng)加個(gè)星星 騰訊視頻鏈接 錄制中間網(wǎng)出問(wèn)題了,重啟了一下,所以有兩部分 視頻1 視頻2 本文的目的在于,盡可能用簡(jiǎn)單的代碼,讓大家了解內(nèi)存監(jiān)控的原理主題思路 獲取內(nèi)存信息 存儲(chǔ)信息 展現(xiàn) 后續(xù)擴(kuò)展 加主機(jī)名,monitor部署在多臺(tái)機(jī)器,不直接插...

    OBKoro1 評(píng)論0 收藏0
  • 【機(jī)器學(xué)習(xí)實(shí)戰(zhàn) Task1】 (KNN)k近鄰算法的應(yīng)用

    摘要:背景近鄰算法的概述近鄰算法的簡(jiǎn)介近鄰算法是屬于一個(gè)非常有效且易于掌握的機(jī)器學(xué)習(xí)算法,簡(jiǎn)單的說(shuō)就是采用測(cè)量不同特征值之間距離的方法對(duì)數(shù)據(jù)進(jìn)行分類(lèi)的一個(gè)算法。完美的分類(lèi)器的錯(cuò)誤率為,而最差的分類(lèi)器的錯(cuò)誤率則為。 1 背景 1.1 k近鄰算法的概述 (1)k近鄰算法的簡(jiǎn)介 k-近鄰算法是屬于一個(gè)非...

    toddmark 評(píng)論0 收藏0
  • Android移動(dòng)客戶端性能測(cè)試淺談——電量

    摘要:性能測(cè)試除了需要監(jiān)控內(nèi)存占用流量等,還需要獲取的電量數(shù)據(jù),測(cè)試在可接受范圍內(nèi),避免出現(xiàn)過(guò)度消耗電量的現(xiàn)象。這一欄顯示了不同的充電方式對(duì)電量使用的影響。 本文由作者張迎貞授權(quán)網(wǎng)易云社區(qū)發(fā)布。 APP性能測(cè)試除了需要監(jiān)控PCU、內(nèi)存占用、流量等,還需要獲取APP的電量數(shù)據(jù),測(cè)試在可接受范圍內(nèi),避免APP出現(xiàn)過(guò)度消耗電量的現(xiàn)象。手機(jī)有很多硬件模塊:CPU,藍(lán)牙,GPS,顯示屏,Wifi,射頻...

    Airy 評(píng)論0 收藏0
  • Python數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)技術(shù)入門(mén)實(shí)戰(zhàn)

    摘要:在本次課程中,著重講解的是傳統(tǒng)的機(jī)器學(xué)習(xí)技術(shù)及各種算法。回歸對(duì)連續(xù)型數(shù)據(jù)進(jìn)行預(yù)測(cè)趨勢(shì)預(yù)測(cè)等除了分類(lèi)之外,數(shù)據(jù)挖掘技術(shù)和機(jī)器學(xué)習(xí)技術(shù)還有一個(gè)非常經(jīng)典的場(chǎng)景回歸。 摘要: 什么是數(shù)據(jù)挖掘?什么是機(jī)器學(xué)習(xí)?又如何進(jìn)行Python數(shù)據(jù)預(yù)處理?本文將帶領(lǐng)大家一同了解數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)技術(shù),通過(guò)淘寶商品案例進(jìn)行數(shù)據(jù)預(yù)處理實(shí)戰(zhàn),通過(guò)鳶尾花案例介紹各種分類(lèi)算法。 課程主講簡(jiǎn)介:韋瑋,企業(yè)家,資深I(lǐng)T領(lǐng)...

    ephererid 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<