精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

壓力測試過程中,采集服務(wù)器性能數(shù)據(jù)

PoisonApple ? 來源:網(wǎng)絡(luò)整理 ? 2018-03-07 15:59 ? 次閱讀

許多企業(yè)在數(shù)據(jù)記載的各環(huán)節(jié)工作中,幾乎全靠手工完成,費時費力,易出差錯。

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

面對這種情況,許多企業(yè)都要求引進(jìn)一套計算機管理系統(tǒng),但引進(jìn)了計算機系統(tǒng)之后,才發(fā)現(xiàn)只解決了問題的一半,因為有了計算機軟件的支持,只可以解決有條件放置計算機的工作場合,而無條件放置計算機的工作環(huán)節(jié)中的手工抄寫狀況仍不能解決。

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

同時,物品信息通過MODEM直接上傳計算中心。采用采集器設(shè)備后數(shù)據(jù)記載的各環(huán)節(jié)實現(xiàn)了數(shù)據(jù)的自動登錄,避免了數(shù)據(jù)的從新錄入問題。

通過python腳本與linux命令結(jié)合的方式采集服務(wù)器性能數(shù)據(jù)。根據(jù)測試過程中服務(wù)器當(dāng)前的tcp鏈接數(shù)量來決定數(shù)據(jù)采集是否結(jié)束。

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

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

從原始文件提取數(shù)據(jù)的配置文件,根據(jù)服務(wù)器語言類型區(qū)分:

abstractConf_ch.xml—中文

abstractConf_en.xml—英文

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

《?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

獲取服務(wù)連接數(shù)量

# 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

需要由主程序執(zhí)行的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

數(shù)據(jù)采集代碼主方法

#-*- 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

#需要手動設(shè)置的參數(shù)

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(‘ ’)]

#通過調(diào)用collect.sh腳本來執(zhí)行服務(wù)器性能數(shù)據(jù)采集

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’,‘》》》》》 性能指標(biāo)采集進(jìn)程執(zhí)行中。。。。?!?/p>

self.to_stop_subprocess(flag,popen)

#停止sys_kpi_collect執(zhí)行的程序的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內(nèi)當(dāng)前連接數(shù)小于初始化連接數(shù),退出程序

#刪除還存在于系統(tǒng)中的sar和iostat進(jìn)程

names = [‘sar’,‘iostat’]

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

subprocess.call(cmd,shell=True)

#終止子進(jìn)程

popen.kill()

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

break

else:

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

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“》》》》》 性能指標(biāo)采集完成”)

else:

while True:

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

break

else:

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

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

#判斷系統(tǒng)中是否還存留sar和iostat進(jìn)程

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 服務(wù)連接數(shù) %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“》》》》》 指標(biāo)采集任務(wù)開始,當(dāng)前 %s 連接數(shù) %d” %(server,num))

#刪除舊的kpi文件

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

#單獨線程執(zhí)行其他服務(wù)(srs、nginx等)進(jìn)程內(nèi)存指標(biāo)采集任務(wù)

for port,server in SERVERS_D.items():

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

#采集服務(wù)器系統(tǒng)kpi指標(biāo)

self.sys_kpi_collect()

writeLog(“INFO”,r“》》》》》 性能數(shù)據(jù)采集結(jié)束!”)

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 指標(biāo)采集進(jìn)程執(zhí)行中。。。。?!?%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之內(nèi),當(dāng)前連接數(shù)小于初始化連接數(shù),程序退出

break

else:

loops += 5

time.sleep(5)

else:

loops = 0

time.sleep(intervaltime)

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

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

except IOError as err:

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

return 0

從原始數(shù)據(jù)文件提取有效數(shù)據(jù)并寫入新的文件

# -*- 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

#需要手動配置的數(shù)據(jù)

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

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

#系統(tǒng)語言編碼

LANG = “en_US.UTF-8”

#獲取系統(tǒng)當(dāng)前使用的語言

def getSysLANG():

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

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

# 根據(jù)系統(tǒng)語言編碼獲取對應(yīng)配置文件路徑

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地址,用來產(chǎn)生區(qū)別于其他機器的數(shù)據(jù)

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

#將最終采集數(shù)據(jù)打包

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“》》》》》 文件壓縮出現(xiàn)錯誤 %s” %str(err))

exit()

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

#腳本主入口函數(shù)

def main_start():

#刪除舊的kpi文件

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

#獲取到配置文件路徑

confpath = getConfPath()

#調(diào)用getCmds獲取解析kpi文件的命令

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

#從原始指標(biāo)文件提取有用的數(shù)據(jù)

AbstractKPI(cmds).abstract_kpi()

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

to_tar()

writeLog(“INFO”,r“》》》》》 指標(biāo)數(shù)據(jù)提取并打包完成”)

if __name__ == ‘__main__’:

main_start()

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 采集器
    +關(guān)注

    關(guān)注

    0

    文章

    192

    瀏覽量

    18180
  • 數(shù)據(jù)采集器

    關(guān)注

    1

    文章

    129

    瀏覽量

    14897
收藏 人收藏

    評論

    相關(guān)推薦

    串口數(shù)據(jù)采集儲存聯(lián)網(wǎng)服務(wù)器應(yīng)用方案

    的應(yīng)用。然而在利用網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸?shù)?b class='flag-5'>過程中,網(wǎng)絡(luò)通信的硬件故障、網(wǎng)絡(luò)擁塞、分組延遲或丟失、數(shù)據(jù)損壞、數(shù)據(jù)重復(fù)和失序等影響使數(shù)據(jù)傳輸造成重大的
    發(fā)表于 04-06 17:01

    ADS1216芯片調(diào)試過程中數(shù)據(jù)采集一直不對

    有誰用過ADS1216這顆芯片啊,在調(diào)試過程中數(shù)據(jù)采集一直不對,不知道該如何配置它寄存,具體怎么操作的,誰有demo或相關(guān)的例子程序?。?/div>
    發(fā)表于 02-27 14:42

    linux服務(wù)器性能測試步驟

    linux服務(wù)器性能測試-服務(wù)器實時【磁盤】監(jiān)控
    發(fā)表于 06-02 06:54

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

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

    視頻大數(shù)據(jù)采集怎么選服務(wù)器?

    傳輸?shù)?b class='flag-5'>過程,大量的文字,圖片甚至視頻等數(shù)據(jù)傳輸會非常消耗帶寬的,帶寬越大傳輸數(shù)據(jù)的速度越快,效率越高。數(shù)據(jù)采集服務(wù)器一定要速度快,穩(wěn)定性,如
    發(fā)表于 07-19 09:38

    動態(tài)模型在軟件系統(tǒng)測試過程中的應(yīng)用研究

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

    什么是SPEC基準(zhǔn)測試(服務(wù)器知識)

    什么是SPEC基準(zhǔn)測試(服務(wù)器知識)  SPEC服務(wù)器應(yīng)用性能測試是一個全面衡量Web應(yīng)用j
    發(fā)表于 01-27 11:38 ?1557次閱讀

    服務(wù)器性能的基準(zhǔn)測試

    服務(wù)器性能的基準(zhǔn)測試  1、SPECweb96測試   SPEC96是由Standard Performance Evaluation Corp提供的、專供檢測
    發(fā)表于 01-27 11:41 ?1196次閱讀

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

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

    淺析STM32調(diào)試過程中的幾個相關(guān)問題

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

    滲透測試過程中所使用的抓包方法

    本篇只是簡單分享平常筆者滲透測試過程中所使用的抓包方法,后面會繼續(xù)更新其他以及安卓端的抓包方法,比較適合沒理解過這方面的新手作參考。
    的頭像 發(fā)表于 02-01 15:41 ?1534次閱讀

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

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

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

    如何解決車載部品測試過程中峰值電流不足的問題? 隨著汽車電子系統(tǒng)的不斷發(fā)展和普及,車載部品的測試過程變得更加復(fù)雜和嚴(yán)峻。其中一個常見的問題是峰值電流不足。峰值電流不足可能導(dǎo)致測試結(jié)果不準(zhǔn)確、設(shè)備損壞
    的頭像 發(fā)表于 11-23 10:33 ?518次閱讀

    服務(wù)器數(shù)據(jù)恢復(fù)—服務(wù)器硬盤燈顯示紅色,服務(wù)器崩潰的數(shù)據(jù)恢復(fù)案例

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

    RIGOL產(chǎn)品在材料應(yīng)力測試過程中的應(yīng)用

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