1. 程式人生 > >Qt linux獲取cpu使用率、記憶體、網路收發速度、磁碟讀寫速度、磁碟剩餘空間等

Qt linux獲取cpu使用率、記憶體、網路收發速度、磁碟讀寫速度、磁碟剩餘空間等

#include "resource_minitor.h"
#include "sys/statfs.h"
resource_minitor::resource_minitor(QObject *parent) : QObject(parent)
{
    connect(&monitor_timer__, &QTimer::timeout, this, &resource_minitor::get_resource__);
    monitor_timer__.start(m_timer_interval__);
}
void resource_minitor::get_resource__()
{
    get_cpu_usage__ ();
    get_disk_speed__();
    get_mem_usage__ ();
    get_net_usage__ ();
    get_disk_space__();
    get_path_space(
"/"); qDebug()<<"\n"; } bool resource_minitor::get_mem_usage__() { QProcess process; process.start("free -m"); //使用free完成獲取 process.waitForFinished(); process.readLine(); QString str = process.readLine(); str.replace("\n",""); str.replace(QRegExp("( ){1,}
")," ");//將連續空格替換為單個空格 用於分割 auto lst = str.split(" "); if(lst.size() > 6) { qDebug("mem total:%.0lfMB free:%.0lfMB",lst[1].toDouble(),lst[6].toDouble()); return true; } return false; } bool resource_minitor::get_net_usage__() { QProcess process; process.start(
"cat /proc/net/dev"); //讀取檔案/proc/net/dev獲取網路收發包數量,再除取樣時間得到網路速度 process.waitForFinished(); process.readLine(); process.readLine(); while(!process.atEnd()) { QString str = process.readLine(); str.replace("\n",""); str.replace(QRegExp("( ){1,}")," "); auto lst = str.split(" "); if(lst.size() > 9 && lst[0] == "enp2s0:") { double recv = 0; double send = 0; if(lst.size() > 1) recv = lst[1].toDouble(); if(lst.size() > 9) send = lst[9].toDouble(); qDebug("%s 接收速度:%.0lfbyte/s 傳送速度:%.0lfbyte/s",lst[0].toStdString().c_str(),(recv - m_recv_bytes__) / (m_timer_interval__ / 1000.0),(send - m_send_bytes__) / (m_timer_interval__ / 1000.0)); m_recv_bytes__ = recv; m_send_bytes__ = send; } } return true; } bool resource_minitor::get_cpu_usage__() { QProcess process; process.start("cat /proc/stat"); process.waitForFinished(); QString str = process.readLine(); str.replace("\n",""); str.replace(QRegExp("( ){1,}")," "); auto lst = str.split(" "); if(lst.size() > 3) { double use = lst[1].toDouble() + lst[2].toDouble() + lst[3].toDouble(); double total = 0; for(int i = 1;i < lst.size();++i) total += lst[i].toDouble(); if(total - m_cpu_total__ > 0) { qDebug("cpu rate:%.2lf%%",(use - m_cpu_use__) / (total - m_cpu_total__) * 100.0); m_cpu_total__ = total; m_cpu_use__ = use; return true; } } return false; } bool resource_minitor::get_disk_speed__() { QProcess process; process.start("iostat -k -d"); process.waitForFinished(); process.readLine(); process.readLine(); process.readLine(); QString str = process.readLine(); str.replace("\n",""); str.replace(QRegExp("( ){1,}")," "); auto lst = str.split(" "); if(lst.size() > 5) { qDebug("disk read:%.0lfkb/s disk write:%.0lfkb/s",(lst[4].toDouble() - m_disk_read__ ) / (m_timer_interval__ / 1000.0),(lst[5].toDouble() - m_disk_write__) / (m_timer_interval__ / 1000.0)); m_disk_read__ = lst[4].toDouble(); m_disk_write__ = lst[5].toDouble(); return true; } return false; } bool resource_minitor::get_disk_space__() { QProcess process; process.start("df -k"); process.waitForFinished(); process.readLine(); while(!process.atEnd()) { QString str = process.readLine(); if(str.startsWith("/dev/sda")) { str.replace("\n",""); str.replace(QRegExp("( ){1,}")," "); auto lst = str.split(" "); if(lst.size() > 5) qDebug("掛載點:%s 已用:%.0lfMB 可用:%.0lfMB",lst[5].toStdString().c_str(),lst[2].toDouble()/1024.0,lst[3].toDouble()/1024.0); } } return true; } bool resource_minitor::get_path_space(const QString & path) { struct statfs diskInfo; statfs(path.toUtf8().data(), &diskInfo); qDebug("%s 總大小:%.0lfMB 可用大小:%.0lfMB",path.toStdString().c_str(),(diskInfo.f_blocks * diskInfo.f_bsize)/1024.0/1024.0,(diskInfo.f_bavail * diskInfo.f_bsize)/1024.0/1024.0); return true; }

相關推薦

Qt linux獲取cpu使用率記憶體網路收發速度磁碟速度磁碟剩餘空間

#include "resource_minitor.h" #include "sys/statfs.h" resource_minitor::resource_minitor(QObject *parent) : QObject(parent) { connect(&monito

Linux下C獲取CPU使用率和記憶體網路丟包

在Linux中如果要監視一個程序的執行情況,如檢視它的CPU使用效率和記憶體使用情況,就需要從系統的 /proc目錄的讀取一些系統資訊。然後分析得到結果,proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介

dd命令測試linux磁碟速度操作

1、先熟悉兩個特殊的裝置:     (1)/dev/null:回收站、無底洞。     (2)/dev/zero:產生字元。 2、測試磁碟寫能力     time dd if=/dev/zero of=/testw.dbf bs=4k

Linux下測試磁碟速度

 1.測/目錄所在磁碟的純寫速度: time dd if=/dev/zero bs=1024 count=1000000 of=/1Gb.file 2.測/目錄所在磁碟的純讀速度: time dd if=/1Gb.file bs=64k |dd of=/dev/null

一種使用記憶體做硬碟的方法,提升速度

今天在網上瀏覽到如下文章: 大意是用記憶體做硬碟,提高讀寫速度。摘記之: MacOS:使用hdid命令就可以:hdid+fstyp_hfs(類似Linux的mkfs.ext4之類的)+mount Win:裝了個SuperSpeed的RamDisk Plus劃了塊4G

Linux 如何測試 IO 效能(磁碟速度

這幾天做MySQL效能測試,偌大一個公司,找幾臺效能測試機器都很糾結,終於協調到兩臺,IO的效能如何還不知道。 資料庫屬於IO密集型的應用,所以還是先評估下Server的IO效能,看看是否能和線上的機器匹配上。 之前一直知道用dd(device to device)命令可以簡單測試磁碟的IO讀寫速度,但沒有

java獲取JVM的CPU佔用率記憶體佔用率執行緒數及伺服器的網口吞吐磁碟速率

怎麼說呢,本人菜鳥一枚,費了幾天時間,終於做了一個用java獲取JVM的CPU佔用率、記憶體佔用率、執行緒數及伺服器的網口吞吐率、磁碟讀寫速率的實現。 其中windows環境下獲取jvm 的cpu佔用率這裡是參考網上別人的東西(在此感謝提供參考的網友),其他的都是基於自己的想法做出來的。該工具類

JAVAEE——宜立方商城13:Mycat數據庫分片主從復制分離100%Linux中成功安裝Mysql的方法

server structure chang exe under have 重新啟動 switch option 1 海量數據的存儲問題 如今隨著互聯網的發展,數據的量級也是撐指數的增長,從GB到TB到PB。對數據的各種操作也是愈加的困難,傳統的關系性數據庫已經無法滿足快速

Qt開發】QThread中的互斥訊號量條件變數

在gemfield的《從pthread到QThread》一文中我們瞭解了執行緒的基本使用,但是有一大部分的內容當時說要放到這片文章裡討論,那就是執行緒的同步問題。關於這個問題,gemfield在《從進 程到執行緒》中有一個比喻,有必要重新放在下面溫習下: ***************

linux檢視cpu型號,記憶體大小,磁碟空間的命令

轉自:http://www.jb51.net/article/97157.htm 1 檢視CPU 1.1 檢視CPU個數 #cat /proc/cpuinfo | grep “physical id” | uniq | wc -l 2 uniq命令:刪除重複行;wc –l命令

Linux 學習筆記—執行緒同步之自旋鎖屏障

3.2.1 讀寫鎖 讀寫鎖和互斥體類似,不過讀寫鎖有更高的並行性,互斥體要麼是鎖住狀態,要麼是不加鎖狀態,而且一次只有一個執行緒可以對其加鎖。而讀寫鎖可以有3個狀態,讀模式下鎖住狀態,寫模式下鎖住狀態,不加鎖狀態。一次只有一個執行緒可以佔有寫模式的讀寫鎖,但是多

筆記:程序間通訊——同步(互斥鎖條件變數訊號量)以及Linux中的RCU

1.互斥鎖 多個執行緒的IPC,需要同步,同步有隱式的和顯示的: 比如unix提供的管道和FIFO,由核心負責同步,比如read發生在write之前,那麼read就會被核心阻塞,這中同步是由核心負責的,使用者不會感知。 但如果使用共享區作為生產者和消費者之間的IPC,那麼程

Linux系統中採用Atlas+Keepalived實現MySQL分離負載均衡

========================================================================================== 一、基礎介紹 ========================================================

Java IO ---學習筆記(標準流記憶體順序輸入流)

1、標準流   語言包 java.lang 中的 System 類管理標準輸入/輸出流和錯誤流。   System.in從 InputStream 中繼承而來,用於從標準輸入裝置中獲取輸入資料(通常是鍵盤)   System.out從 PrintStream 中繼承而來,把輸

獲取CPU利用率 系統記憶體和程序記憶體

#include <iostream> #include <windows.h> #include <Psapi.h> using namespace std; __int64 CompareFileTime(FILETIME t1,FILETIME t2) { _

linux下多執行緒同步機制之訊號量互斥量條件變數

之前有寫過類似的部落格,這東西不用老忘,現在又有更清晰的理解了。 一、訊號量 編譯時候加入-lrt 訊號量最基本的兩個操作就是PV操作:P()操作實現訊號量減少,V()操作實現訊號量的增加 訊號量的值取決於訊號量的型別,訊號量的型別有多種: (1)二進位制訊號量:0與1.

phpcsvxml文件: SimpleExcel

所有 技術分享 blog 二維數組 代碼 pre http 導出 set 實例結構: 1. csv2xml.demo.php <?php use SimpleExcel\SimpleExcel; // 這句不能少! require_once (‘../

自旋鎖

adr 一個 失敗 基本 獲得 圖書館 不能 color pre 概述:   在一些程序中存在讀者寫者問題,也就是說,對某些資源的訪問會 存在兩種可能的情況,一種是訪問必須是排它行的,就是獨占的意思,這稱作寫操作; 另一種情況就是訪問方式可以是共享的,就是說可以有多個線程

6MySQL 主從同步 MySQL 分離 MySQL 性能調優

chang 時間 form 變量名 col 最大 rom 驗證 uptime day06一、mysql主從同步 二、數據讀寫分離三、MySQL優化++++++++++++++++++++++++++++++++一、mysql主從同步 1.1 主從同步介紹?從庫服務器自動同

7.打開文件文件操作with方式文件常用函數

進行 不能 決定 height r+ 列表 inf pen ron 打開文件: 在python3中,打開文件的函數是:open(file, mode=‘r‘, buffering=None, encoding=None, errors=None, newline=Non