在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

壓力測試過程中,采集服務器性能數據

PoisonApple ? 來源:網絡整理 ? 2018-03-07 15:59 ? 次閱讀

許多企業在數據記載的各環節工作中,幾乎全靠手工完成,費時費力,易出差錯。

例如:在倉庫作業管理過程中,進貨、退貨、出貨、盤點等日常活動全由手工完成,由于填寫瑣碎而復雜的表格及數據重復填寫,增加了工作量,所以工作容易出錯,效率低下。

面對這種情況,許多企業都要求引進一套計算機管理系統,但引進了計算機系統之后,才發現只解決了問題的一半,因為有了計算機軟件的支持,只可以解決有條件放置計算機的工作場合,而無條件放置計算機的工作環節中的手工抄寫狀況仍不能解決。

即使計算機解決了部分手工抄寫狀況,但不能改變大量的打印表格的數據在下一個計算機作業點重新輸入時而引發的瓶頸現象 如果通過用PT923或LK934 采集器設備,再配置一套行之有效的作業流程,及時準確的掌握每單中每個商品的情況。用PT923或LK934對物品進行條碼掃描登記。還可以對物品查詢修改。

同時,物品信息通過MODEM直接上傳計算中心。采用采集器設備后數據記載的各環節實現了數據的自動登錄,避免了數據的從新錄入問題。

通過python腳本與linux命令結合的方式采集服務器性能數據。根據測試過程中服務器當前的tcp鏈接數量來決定數據采集是否結束。

腳本主要有三個操作,第一個是性能數據初步采集,通過調用linux的sar和iostat命令,將數據寫入原始文件中。采集完成后,執行性能指標提取腳本,從原始指標文件提取有效的數據寫入最終的文件中,并進行打包操作。

代碼只是本人滿足工作所需而作,算不上很好,可以滿足工作所需,僅此而已

從原始文件提取數據的配置文件,根據服務器語言類型區分:

abstractConf_ch.xml—中文

abstractConf_en.xml—英文

配置文件主要是指明原始文件路徑并按照需求使用linux的cat、egrep、awk命令從文件中提取數據

《?xml version=‘1.0’ encoding=‘utf-8’?》

《abstract》

《res_file name=“res/CPU”》

《uniqflag》CPU《/uniqflag》

《object_file》result/cpu_status《/object_file》

《graphtitle》Cpu_Status《/graphtitle》

《linelabel》%user %system《/linelabel》

《x_y_label》Time(s) Cpu_Percent(%)《/x_y_label》

《cmd》cat %s | egrep -v “Linux|^$|%s” | awk ‘BEGIN {print “%s %s %s”}{if($2 !~/AM|PM/) print $3,$5}’ 》》 %s《/cmd》

《/res_file》

。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。

《/abstract》12345678910111213

獲取服務連接數量

# coding:utf-8

#__author__ = ‘Libiao’

import subprocess

class GetLinkingNumber(object):

def __init__(self):

pass

def getLinkingNumber(serlf,servers):

ret = []

if isinstance(servers,str):

num = subprocess.Popen(“netstat -tnap | grep tcp | grep %s | wc -l” %servers,stdout=subprocess.PIPE,shell=True).stdout

ret.append(int(num.readline().strip()))

elif isinstance(servers,dict):

for k,v in servers.items():

num = subprocess.Popen(“netstat -tnap | grep tcp | grep %s | wc -l” %v,stdout=subprocess.PIPE,shell=True).stdout

ret.append(int(num.readline().strip()))

else:

pass

return ret123456789101112131415161718192021

需要由主程序執行的linux命令

#!/bin/bash

sar -n DEV 10 》》res/NetWork &

iostat -x -d -k 10 》》res/Disk &

sar -r 10 》》res/Memory &

sar -q 10 》》res/System_load_average &

sar -u 10 》》res/CPU &

sar -b 10 》》res/TPS &12345678

數據采集代碼主方法

#-*- coding:utf-8 -*-

“”“

reated on 2015年10月16日

@author: LiBiao

”“”

import time,os

import subprocess

import multiprocessing

from write_log import writeLog

import del_old_file

from record_test_data import Record_Data

from server_memory_collect import serverMemoryCollect

from get_linking_number import GetLinkingNumber

#需要手動設置的參數

SERVERS_D = {‘1935’:‘srs-rtmp’,‘18080’:‘srs-hls’,‘80’:‘nginx’} #可以輸入srs或者nginx或者ATS

#間隔時間

INTERVAL_TIME = 10

class KPI_Collect(object):

def __init__(self):

self.getLinkNum = GetLinkingNumber()

self.TCP_COUNT = self.getLinkNum.getLinkingNumber(SERVERS_D)

self.tcpRecord = Record_Data(“res/linking_number”)

def getStr(self,alist):

ret = “”

for s in alist:

ret += str(s)

ret += ‘ ’

return [ret.rstrip(‘ ’)]

#通過調用collect.sh腳本來執行服務器性能數據采集

def sys_kpi_collect(self):

flag = ‘1’

cmds = [‘。/collect.sh’]

popen = subprocess.Popen(cmds[0],stdout=subprocess.PIPE,shell=True)

pid = popen.pid

writeLog(‘INFO’,‘》》》》》 性能指標采集進程執行中。。。。。’)

self.to_stop_subprocess(flag,popen)

#停止sys_kpi_collect執行的程序的popen句柄

def to_stop_subprocess(self,flag,popen):

curr_tcpnum = self.getLinkNum.getLinkingNumber(SERVERS_D)

self.tcpRecord.recordData([“srs&nginx Linking”,“%s %s %s” %tuple(SERVERS_D.values()),“Time(s) Numbers”])

self.tcpRecord.recordData(self.getStr(self.TCP_COUNT))

if flag is ‘1’:

loops = 0

while True:

if sum(curr_tcpnum) 《= sum(self.TCP_COUNT):

if loops == 15:

#15s內當前連接數小于初始化連接數,退出程序

#刪除還存在于系統中的sar和iostat進程

names = [‘sar’,‘iostat’]

cmd = “killall -9 %s %s” %tuple(names)

subprocess.call(cmd,shell=True)

#終止子進程

popen.kill()

if subprocess.Popen.poll(popen) is not None:

break

else:

writeLog(“INFO”,r“》》》》》 等待子進程終止”)

else:

loops += 5

time.sleep(5)

else:

loops = 0

time.sleep(INTERVAL_TIME)#等待INTERVAL_TIME時間

curr_tcpnum = self.getLinkNum.getLinkingNumber(SERVERS_D)

self.tcpRecord.recordData(self.getStr(curr_tcpnum))

writeLog(“INFO”,r“》》》》》 性能指標采集完成”)

else:

while True:

if subprocess.Popen.poll(popen) is not None:

break

else:

writeLog(“INFO”,r“》》》》》 等待子進程終止”)

writeLog(“INFO”,r“》》》》》 性能指標采集完成”)

#判斷系統中是否還存留sar和iostat進程

def is_process_exists(self,name):

cmd = “ps ax | grep %s | grep -v grep” %name

p = subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)

p.wait()

if p.stdout.readline():

return 1

return 0

def main_start(self):

start_times = 0.0

timeRecord = Record_Data(“res/timeConsum”)

for server,num in zip(SERVERS_D.values(),self.TCP_COUNT):

writeLog(“INFO”,r“》》》》》 初始 %s 服務連接數 %d” %(server,num))

curr_tcpN = self.getLinkNum.getLinkingNumber(SERVERS_D)

time.sleep(10)

while True:

if not sum(curr_tcpN) 《= sum(self.TCP_COUNT):

start_times = time.time()

for server,num in zip(SERVERS_D.values(),curr_tcpN):

writeLog(“INFO”,r“》》》》》 指標采集任務開始,當前 %s 連接數 %d” %(server,num))

#刪除舊的kpi文件

del_old_file.Del_Old_File(“res/”).del_old_file()

#單獨線程執行其他服務(srs、nginx等)進程內存指標采集任務

for port,server in SERVERS_D.items():

multiprocessing.Process(target=serverMemoryCollect,args=([port,server],INTERVAL_TIME,sum(self.TCP_COUNT),self.getLinkNum)).start()

#采集服務器系統kpi指標

self.sys_kpi_collect()

writeLog(“INFO”,r“》》》》》 性能數據采集結束!”)

time_consum = time.time() - start_times

timeRecord.recordData([“%s” %str(time_consum)])

break

else:

time.sleep(1)

curr_tcpN = self.getLinkNum.getLinkingNumber(SERVERS_D)

if __name__ == ‘__main__’:

kpiCollect = KPI_Collect()

kpiCollect.main_start()

#-*- coding:utf-8 -*-

“”“

reated on 2015年10月16日

@author: LiBiao

”“”

import time

import subprocess

from write_log import writeLog

from record_test_data import Record_Data

#Record the memory of server used

def serverMemoryCollect(servers,intervaltime,tcpNum,getLinkObj):

getLinkNum = getLinkObj

memRecord = Record_Data(“res/%s” %(servers[1]+“:”+servers[0]))

cmd = “ps -ef | grep %s | grep -v grep | awk ‘{print $2}’” %servers[1]

f = subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)

writeLog(“INFO”,“》》》》》 %s 指標采集進程執行中。。。。。” %servers[1])

pids = [pid.strip() for pid in f.stdout]

heard = [servers[1],‘used’,‘Linking_Number Memory_Capacity(MB)’]

try:

memRecord.recordData(heard)

curr_tcpN = sum(getLinkNum.getLinkingNumber(servers[0]))

loops = 0

while True:

vrss = []

for p in pids:

cmd2 = “cat /proc/%s/status | grep VmRSS | awk ‘{print $2}’” %p

rss = subprocess.Popen(cmd2,stdout=subprocess.PIPE,shell=True).stdout

vrss.append(int(rss.readline().strip()))

memRecord.recordData([‘%s’ %str((sum(vrss)/1024))])

if curr_tcpN 《= tcpNum:

if loops == 15:

#15s之內,當前連接數小于初始化連接數,程序退出

break

else:

loops += 5

time.sleep(5)

else:

loops = 0

time.sleep(intervaltime)

curr_tcpN = sum(getLinkNum.getLinkingNumber(servers[0]))

writeLog(“INFO”,r“》》》》》 %s 進程內存采集完成” %servers[1])

except IOError as err:

writeLog(“INFO”,“File error: ” + str(err))

return 0

從原始數據文件提取有效數據并寫入新的文件

# -*- coding: utf-8 -*-

‘’‘

Created on 2015年9月14日

@author: LiBiao

’‘’

import os,time

import subprocess

import getCmds

import del_old_file

from write_log import writeLog

#需要手動配置的數據

#SERVER_NAME = [‘srs_2.0.0.’,‘nginx’]#‘nginx’ #可以輸入nginx或者srs

SERVERS_D = {‘1935’:‘srs-rtmp’,‘18080’:‘srs-hls’,‘80’:‘nginx’}

#系統語言編碼

LANG = “en_US.UTF-8”

#獲取系統當前使用的語言

def getSysLANG():

popen = subprocess.Popen(‘echo $LANG’,stdout=subprocess.PIPE,shell=True)

return popen.stdout.read().strip()

# 根據系統語言編碼獲取對應配置文件路徑

def getConfPath():

if getSysLANG() == LANG:

return “。/conf/abstractConf_en.xml”

return “。/conf/abstractConf_ch.xml”

class AbstractKPI(object):

def __init__(self,*args):

(self.cmds,) = args

def abstract_kpi(self):

for cmd in self.cmds:

# print cmd

subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)

#獲取本機ip地址,用來產生區別于其他機器的數據

def get_local_ip():

try:

ip = os.popen(“ifconfig | grep ‘inet addr’ | awk ‘{print $2}’”).read()

ip = ip[ip.find(‘:’) + 1:ip.find(‘ ’)]

except Exception,e:

print e

return ip

#將最終采集數據打包

def to_tar():

ip = get_local_ip()

times = time.strftime(“%Y-%m-%d-%H-%M-%S”,time.localtime())

subprocess.call(“cp res/linking_number res/timeConsum ” +“res/%s ”*len(SERVERS_D.items()) %tuple([v + “:” + k for k,v in SERVERS_D.items()]) + “result/”,shell=True)

files = [“result/” + filename for filename in os.listdir(“result/”)]

cmd = ‘tar -cf SYS_KPI_’+ ip + “_” + times + ‘.tar’ + ‘ %s’*len(files) %tuple(files)

try:

subprocess.call(cmd,shell=True)

except Exception as err:

writeLog(“ERROR”,r“》》》》》 文件壓縮出現錯誤 %s” %str(err))

exit()

writeLog(“INFO”,r“》》》》》 指標文件打包完成”)

#腳本主入口函數

def main_start():

#刪除舊的kpi文件

del_old_file.Del_Old_File(“result/”).del_old_file()

#獲取到配置文件路徑

confpath = getConfPath()

#調用getCmds獲取解析kpi文件的命令

cmds = getCmds.Get_Cmds(confpath).getcmds()

#從原始指標文件提取有用的數據

AbstractKPI(cmds).abstract_kpi()

#將result目錄下的解析后的kpi文件打包

to_tar()

writeLog(“INFO”,r“》》》》》 指標數據提取并打包完成”)

if __name__ == ‘__main__’:

main_start()

腳本中采集數據的命令是linux的,其實這并不是最合適的處理方式,之前只是為了滿足工作所需。目前正在使用python第三方模塊psutil中的一些方法來執行服務器性能數據的采集,這樣的話,腳本就會更加符合python開發的模式。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 采集器
    +關注

    關注

    0

    文章

    194

    瀏覽量

    18213
  • 數據采集器
    +關注

    關注

    1

    文章

    140

    瀏覽量

    14934
收藏 人收藏

    評論

    相關推薦

    ADS1216調試過程中數據采集一直不對,如何配置寄存

    有誰用過ADS1216這顆芯片啊,在調試過程中數據采集一直不對,不知道該如何配置它寄存,誰有demo或相關的例子程序啊,具體怎么操作的?
    發表于 12-20 07:53

    串口數據采集儲存聯網服務器應用方案

    的應用。然而在利用網絡進行數據傳輸的過程中,網絡通信的硬件故障、網絡擁塞、分組延遲或丟失、數據損壞、數據重復和失序等影響使數據傳輸造成重大的
    發表于 04-06 17:01

    ADS1216芯片調試過程中數據采集一直不對

    有誰用過ADS1216這顆芯片啊,在調試過程中數據采集一直不對,不知道該如何配置它寄存,具體怎么操作的,誰有demo或相關的例子程序啊?
    發表于 02-27 14:42

    linux服務器性能測試步驟

    linux服務器性能測試-服務器實時【磁盤】監控
    發表于 06-02 06:54

    用示波器測試過程中探頭電阻在故障分析的影響

    用示波器測試過程中探頭電阻在故障分析的影響。故障現象是有一個表頭在通信的過程中偶爾能通信一下,然后就不能通信了,通信部分的電路如下圖所示:箭頭1、2為二極管兩端,兩端的引線接入到單片機比較
    發表于 01-11 07:52

    視頻大數據采集怎么選服務器

    傳輸的過程,大量的文字,圖片甚至視頻等數據傳輸會非常消耗帶寬的,帶寬越大傳輸數據的速度越快,效率越高。數據采集服務器一定要速度快,穩定性,如
    發表于 07-19 09:38

    動態模型在軟件系統測試過程中的應用研究

    系統測試是軟件開發過程中的重要環節,系統測試過程的動態模型有助于更好地理解和分析系統行為,做出正確的判斷和決策;相對于已有的軟件測試模型,通過對錯誤發現效率的
    發表于 07-16 11:58 ?8次下載

    服務器性能的基準測試

    服務器性能的基準測試  1、SPECweb96測試   SPEC96是由Standard Performance Evaluation Corp提供的、專供檢測
    發表于 01-27 11:41 ?1223次閱讀

    壓力傳感器測試過程的可靠性概念概述[圖]

    根據壓力傳感器的實際測試過程中的各個環節已經或可能產生的影響,獲取壓力傳感器真實性能輸出數據的因素,采用可靠性的分析方法對其進行分析;提示了
    發表于 01-18 11:21 ?3904次閱讀
    <b class='flag-5'>壓力傳感器</b><b class='flag-5'>測試過程</b>的可靠性概念概述[圖]

    淺析STM32調試過程中的幾個相關問題

    總的來講,單片機調試是單片機開發工作必不可少的環節。不管你愿不愿意,調試過程中總會有各種不期而遇的問題出現在我們面前來磨礪我們。這里分享幾點STM32調試過程中與開發工具及IDE有關的幾個常見問題,以供參考。
    的頭像 發表于 01-21 13:50 ?5421次閱讀

    解決測試過程中多路供電的難題

    ■?■ 通信、人工智能、云計算、智能終端等產品功能越來越強大、電路也越來越復雜,在這些產品的測試過程中,往往需要多路的供電。與此同時,每個供電通道的電壓和電流規格各異,上電或下電過程電壓斜率、時序
    的頭像 發表于 02-15 16:25 ?1021次閱讀

    如何解決車載部品測試過程中峰值電流不足的問題?

    如何解決車載部品測試過程中峰值電流不足的問題? 隨著汽車電子系統的不斷發展和普及,車載部品的測試過程變得更加復雜和嚴峻。其中一個常見的問題是峰值電流不足。峰值電流不足可能導致測試結果不準確、設備損壞
    的頭像 發表于 11-23 10:33 ?557次閱讀

    服務器數據恢復—服務器硬盤燈顯示紅色,服務器崩潰的數據恢復案例

    一臺服務器中有一組由多塊硬盤組建的raid陣列,在運行過程中服務器突然崩潰,管理員檢查服務器發現該服務器raid陣列中有兩塊硬盤的指示燈顯示紅色。于是,管理員重啟
    的頭像 發表于 03-15 11:17 ?520次閱讀
    <b class='flag-5'>服務器</b><b class='flag-5'>數據</b>恢復—<b class='flag-5'>服務器</b>硬盤燈顯示紅色,<b class='flag-5'>服務器</b>崩潰的<b class='flag-5'>數據</b>恢復案例

    RIGOL產品在材料應力測試過程中的應用

    、強度、剛度、穩定性等,可以精確地控制產品質量。本篇解決方案將介紹RIGOL產品在材料應力測試過程中的應用。
    的頭像 發表于 07-12 17:01 ?322次閱讀
    RIGOL產品在材料應力<b class='flag-5'>測試過程中</b>的應用

    高防服務器壓力測試步驟

    防御是一組防火墻防護多臺服務器。 準備測試環境:確保有一個受控環境來模擬攻擊場景,包括硬件資源、軟件資源和網絡資源。 定義測試目標:明確要測試性能
    的頭像 發表于 12-23 15:15 ?103次閱讀
    主站蜘蛛池模板: 99插插| www.亚洲成人| 国产午夜精品理论片免费观看 | www一区二区三区| 高h污快穿文汁水四溅| 亚洲欧美一区二区三区麻豆| 亚洲国产成人在线| 日日噜噜夜夜狠狠tv视频免费 | 欧美人与动性视频在线观| 女人张开腿让男人桶免费最新| 美国色天使| 亚洲成人激情片| 性开放网站| 日韩毛片在线| 久久久久久9| avtt国产| 美女天天干| 黄在线观看在线播放720p| 色香欲亚洲天天综合网| 亚洲天堂最新地址| 青草青青产国视频在线| 国产色视频网站| 天天插日日插| 日本与大黑人xxxx| 美日韩毛片| 色综合日韩| 狠狠曹| 视频在线观看免费播放www| 2021久久精品国产99国产| 欧美成人26uuu欧美毛片| 亚洲五月六月丁香激情| 黄网站色视频免费观看| 色福利视频| 国产成人v爽在线免播放观看| 天堂最新资源在线| 欧美大色网| 亚洲国产色婷婷精品综合在线观看| 日本wwwwwwwww| 91亚色视频| www.久艹| 中国美女毛片|