回答
據我所知,沒有Matlab函數可以在進程使用級別訪問系統屬性。要獲得這些信息,必須調用外部類。
在互聯網上的搜索可以取你一些Java類可以查詢進程屬性。 Java方法的優勢在於它更可能是跨平臺的。對於windows用戶,仍然有2種查詢這些信息的方式:通過直接調用windows API(更快,但在Matlab中放置相當複雜),並且使用.net
對象(雖然速度較慢,但卻非常容易Matlab處理.net類幾乎無縫)。
- 創建對象
我們需要告訴MATLAB實例化一個System.Diagnostics.PerformanceCounter對象。舉例來說,我創建了兩個這樣的對象,其中一個看起來是系統空閒進程(叫做Idle
),另一個看起來是Matlab進程(這個會報告Matlab CPU使用率)。
function mon = createMonitor
MatlabProcess = System.Diagnostics.Process.GetCurrentProcess(); % "Matlab" process
cpuIdleProcess = 'Idle' ;
mon.NumOfCPU = double(System.Environment.ProcessorCount);
mon.ProcPerfCounter.Matlab = System.Diagnostics.PerformanceCounter('Process', '% Processor Time', MatlabProcess.ProcessName);
mon.ProcPerfCounter.cpuIdle = System.Diagnostics.PerformanceCounter('Process', '% Processor Time', cpuIdleProcess);
end
- 查詢對象
與Windows API,我們不得不做大量的機器週期計算自己的,但這些.NET對象整齊,因爲他們做的一切對你來說(儘管如此,但性能上的代價)。所以現在只需要調用對象並詢問最後一次CPU使用率是多少...容易。
唯一需要注意的細節是報告的數字僅適用於進程正在使用的處理器核心,因此如果您有多個核心,報告的數量必須除以處理器的總數得到一個整體的數字。
% Calculate the cpu usage
cpu.total = 100 - h.mon.ProcPerfCounter.cpuIdle.NextValue/h.mon.NumOfCPU ;
cpu.matlab = h.mon.ProcPerfCounter.Matlab.NextValue/h.mon.NumOfCPU ;
- 顯示
你去那裏。最困難的部分是知道和訪問這些.net
微妙之處。現在,如果你想要一個真正的監視器,你需要定義一個定時器,它將定期調用這些方法,然後顯示結果。
要知道,調用這些.net
對象是在處理器時間相當昂貴,所以如果你創建了太多PerformanceCounter
您的顯示器會最終吃大部分的處理器時間(每個進程將是例如相當徵稅)。 ..不要試圖刷新計時器在瘋狂短的間隔要麼
- 功能齊全例如:
很抱歉,但90%的它只是爲貴力學是(我保持儘可能粗糙,但仍然),所以我不會解釋全部。唯一重要的部分是上面顯示的片段(它們包含在下面的全功能示例中)。
function hcol = CPU_monitor
h = create_gui ;
end
function mon = createMonitor
MatlabProcess = System.Diagnostics.Process.GetCurrentProcess(); %// "Matlab" process
cpuIdleProcess = 'Idle' ;
mon.NumOfCPU = double(System.Environment.ProcessorCount);
mon.ProcPerfCounter.Matlab = System.Diagnostics.PerformanceCounter('Process', '% Processor Time', MatlabProcess.ProcessName);
mon.ProcPerfCounter.cpuIdle = System.Diagnostics.PerformanceCounter('Process', '% Processor Time', cpuIdleProcess);
end
function updateMeasure(obj,evt,hfig)
h = guidata(hfig) ;
%// Calculate the cpu usage
cpu.total = 100 - h.mon.ProcPerfCounter.cpuIdle.NextValue/h.mon.NumOfCPU ;
cpu.matlab = h.mon.ProcPerfCounter.Matlab.NextValue/h.mon.NumOfCPU ;
%// update the display
set(h.txtTotalCPU,'String',num2str(cpu.total,'%5.2f %%'))
set(h.txtMatlabCPU,'String',num2str(cpu.matlab,'%5.2f %%'))
end
function StartMonitor(obj,evt)
h = guidata(obj) ;
start(h.t)
end
function StopMonitor(obj,evt)
h = guidata(obj) ;
stop(h.t)
end
function h = create_gui %// The boring part
h.fig = figure('Unit','Pixels','Position',[200 800 240 120],'MenuBar','none','Name','CPU usage %','NumberTitle','off') ;
h.btnStart = uicontrol('Callback',@StartMonitor,'Position',[10 80 100 30],'String', 'START');
h.btnStart = uicontrol('Callback',@StopMonitor,'Position',[130 80 100 30 ],'String', 'STOP');
h.lbl1 = uicontrol('HorizontalAlignment','right','Position',[10 50 100 20],'String','TOTAL :','Style','text');
h.txtTotalCPU = uicontrol('Position',[130 50 100 20],'String','0','Style','text') ;
h.lbl2 = uicontrol('HorizontalAlignment','right','Position',[10 10 100 20],'String','Matlab :','Style','text');
h.txtMatlabCPU = uicontrol('Position',[130 10 100 20],'String','0','Style','text') ;
movegui(h.fig,'center')
%// create the monitor
h.mon = createMonitor ;
%// Create the timer
h.t = timer;
h.t.Period = 1;
h.t.ExecutionMode = 'fixedRate';
h.t.TimerFcn = {@updateMeasure,h.fig} ;
h.t.TasksToExecute = Inf;
%// store the handle collection
guidata(h.fig,h)
end
- 1. 沒有聲音播放時核心音頻CPU利用率高
- 2. 雙核CPU利用率W¯¯運行
- 3. 利用多個CPU核心和Tensorflow
- 4. CPU利用率6
- 5. CPU利用率高
- 6. 我們在4核心機器上CPU利用率高達380%的問題
- 7. UNIX上的CPU利用率
- 8. 德爾福XE需要一個完整的核心(100%的CPU利用率)
- 9. AWS RDS CPU利用率100%
- 10. CPU利用率和線程
- 11. FFMPEG和CPU利用率
- 12. WP7,高CPU利用率
- 13. RDS實例CPU利用率
- 14. JMeter CPU利用率報告
- 15. Spark CPU利用率監測
- 16. CPU利用率達到100%
- 17. EC2實例CPU利用率
- 18. CPU利用率高 - VB.NET
- 19. Java應用程序的多核CPU利用率
- 20. 讀取多核CPU的CPU使用率
- 21. CPU使用率和CPU利用率之間的區別?
- 22. top顯示高用戶空間CPU利用率,但所有進程顯示0
- 23. 如何充分利用所有的CPU核心Clojure中
- 24. 有什麼我可以做的更好地利用CPU核心?
- 25. 在C中查找CPU利用率
- 26. CPU雙核心MIPS
- 27. CPU核心與在Tomcat
- 28. RcppArmadillo在幾個CPU核心
- 29. java的多線程的CPU利用率
- 30. 如何獲得超過2個核心的CPU使用率?
您想要Windows,Unix,或者跨平臺解決方案嗎? – Hoki 2014-09-20 16:52:06
我在Windows平臺上運行我的'GUI'。如果可以,請在Windows和跨平臺上描述解決方案。謝謝。 – user2991243 2014-09-20 16:55:09
對不起,我現在在Windows 8我似乎無法恢復我的舊的跨平臺解決方案。它涉及一些'Java'類。對於windows,仍然有一個工作解決方案,但它很大程度上依賴於從matlab中調用的'.net'類(很少是原生matlab,除了顯示部分)。我會盡力在稍後草擬一個例子。 – Hoki 2014-09-20 17:48:59