在Linux上,我經常使用 free命令查看系統中可用內存和已用內存的當前數量。例如:
$可用的可用共享緩衝區已緩存的總空閒可用內存總數:7264256 1010952 6253304 0 371892 189088-/ +緩衝區/緩存:449972 6814284交換:8126456 28 8126428
當我在Mac OS X的Terminal中輸入 free
時,似乎不存在。有其他選擇嗎?
在Linux上,我經常使用 free命令查看系統中可用內存和已用內存的當前數量。例如:
$可用的可用共享緩衝區已緩存的總空閒可用內存總數:7264256 1010952 6253304 0 371892 189088-/ +緩衝區/緩存:449972 6814284交換:8126456 28 8126428
當我在Mac OS X的Terminal中輸入 free
時,似乎不存在。有其他選擇嗎?
就像@khedron所說的,您可以在“活動監視器”中看到此信息。
如果要在命令行中使用,這是我編寫的Python腳本(或也許是從其他人那裡修改而來的,我不記得了,它已經很老了),向您展示Wired,Active,Inactive和Free內存量:
#!/ usr / bin / pythonimport subprocessimport re#獲取流程信息= subprocess.Popen(['ps','-caxm','-orss,comm'],stdout = subprocess.PIPE).communicate()[0] .decode()vm = subprocess.Popen (['vm_stat'],stdout = subprocess.PIPE).communicate()[0] .decode()#迭代進程processLines = ps.split('\ n')sep = re.compile('[\ s] +' )rssTotal = 0#kB用於範圍(1,len(processLines))中的行:rowText = processLines [row] .strip()rowElements = sep.split(rowText)嘗試:rss = float(rowElements [0])* 1024除:rss = 0#忽略... rssTotal + = rss#處理vm_statvmLines = vm.split('\ n')sep = re.compile(':[\ s] +')vmStats = {}用於範圍內的行( 1,len(vmLines)-2):rowText = vmLine s [row] .strip()rowElements = sep.split(rowText)vmStats [(rowElements [0])] = int(rowElements [1] .strip('\。'))* 4096print'有線內存:\ t \ t%d MB'%(vmStats [“ Pages down down”] / 1024/1024)print('活動內存:\ t \ t%d MB'%(vmStats [“ Pages active”] / 1024/1024))print ('Inactive Memory:\ t%d MB'%(vmStats [“ Pages inactive”] / 1024/1024))print('Free Memory:\ t \ t%d MB'%(vmStats [“ Pages free”] / 1024/1024))print('Real Mem Total(ps):\ t%.3f MB'%(rssTotal / 1024/1024))
您可以看到,從命令行調用 vm_stat
,儘管它計數為4kB頁,因此該腳本將轉換為MB。
該腳本還計算了所有正在運行的“實際內存”使用情況比較過程(由於內存是一個複雜的野獸,因此不匹配整體內存統計信息中的任何特定值)。
這是我係統上腳本輸出的一個示例:
[user @ host:〜]%memReport.py有線內存:1381 MB
活動內存:3053 MB非活動內存:727 MB可用內存:1619 MB實際總內存(ps):3402.828 MB
(已進行了很小的調整,以匹配StackExchange上的選項卡大小;)
您需要的命令是 vm_stat
-與傳統的Unix工具 vmstat
類似,但有一些特定於MACH的差異。手冊頁寫得很好。
它之所以變慢,似乎是因為 top -l 1
總是在完成後延遲一秒鐘,這是刷新之間的標準延遲。在命令中添加-s 0使其立即完成:
top -l 1 -s 0 | grep PhysMem
另外,為了清楚起見,我喜歡在其行上顯示每個mem組件,因此我在sed替換字符串中添加了9個空格以與'PhysMem:'對齊:
top -l 1 -s 0 | grep PhysMem | sed's /,/ \ n / g'
這是一個簡單的方法,可以使整個 vm_stat
輸出更加人性化:
$ vm_stat | perl -ne'/頁面大小為(\ d +)/和$ size = $ 1; / Pages \ s +([[^:] +)[^ \ d] +(\ d +)/和printf(“%-16s%16.2f Mi \ n”,“ $ 1:”,$ 2 * $ size / 1048576); '免費:2330.23故障:2948.07故障:1462.97故障:599.45故障:840.46寫入時復制:43684.84零填充:385865.48失誤:608.14 Mi
如果您只真正對交換使用感興趣(什麼是 free
的輸出的最後一行):
$ sysctl vm.swapusagevm。交換:總計=已使用64.00M = 0.00M可用= 64.00M(已加密)
在Mac OS X上有一個類似於 free
的終端命令...它稱為 top
有關更多信息,您可以簽出此Apple支持文檔。
只需從@zack中獲取解決方案,並添加非活動和推測性塊。
#!/ bin / bashFREE_BLOCKS = $(vm_stat | grep free | awk' {print $ 3}'| sed's /\.//')INACTIVE_BLOCKS = $(vm_stat | grep無效| awk'{print $ 3}'| sed's /\.//')SPECULATIVE_BLOCKS = $(vm_stat | grep投機性| awk'{print $ 3}'| sed's /\.//')FREE = $(((($ FREE_BLOCKS + SPECULATIVE_BLOCKS)** 4096/1048576))INACTIVE = $((($ INACTIVE_BLOCKS * 4096/1048576))) TOTAL = $((((($ FREE + $ INACTIVE)))echo free:$ FREE MBecho inactive:$ INACTIVE MBecho Total free:$ TOTAL MB
free =“ $(($(vm_stat | awk'/ free / {gsub(/\./,”“,$ 3);打印$ 3}')* 4096/1048576))MiB free”
#!/ bin / bashtop -l 1 | grep PhysMem: awk'{print $ 10}'
僅適用於Unix專家:
top -l 1 | awk'/ PhysMem:/ {print $ 10}'
Mac OS X並沒有完全相同的版本,但是還有其他幾種獲取信息的方法:
system_profiler
-在外殼中顯示所有Mac的系統配置文件信息 sysctl -a | grep mem
或 sysctl hw.memsize
(總mem)您可以嘗試使用 memory_pressure
命令。
查看系統輸出(i5,4 GB RAM)
系統具有2147483648(524288頁,頁面大小為4096)。
統計:
無頁面數:90009
可清除的頁面:139593
清除的頁面數:7496548
交換I / O:
斯瓦平人:470466
掉期:530913
頁面Q計數:
活動頁面:407739
無效頁面:148277
投機頁面:16200
節流的頁面數:0
向下佈線的頁面數:263064
壓縮機統計信息:
壓縮機使用的頁面數:122815
解壓縮後的頁面數:7327420
壓縮頁面數:17625795
文件I / O:
佩金斯:1538997
頁面輸出:86692
系統範圍內的可用內存百分比:63%
從您的其他問題來看,我認為您已經找到了使用“活動監視器”實用程序查看內存狀態的方法,對嗎?僅作記錄,它在/ Applications / Utilities / Activity Monitor.app中。
如果要使用命令行工具報告非常詳細的內存使用情況,則可以嘗試使用 allmemory
命令。
以上是我喜歡的太多工作,並且假設您也已經完成了完整的安裝...如果您是從Mac OS X啟動磁盤啟動的,那麼上述所有解決方案顯然都不會成功。正常工作...只需使用命令“ hostinfo”,這是我2012年中運行Mavericks(10.9.1)的MBAir的輸出:
Mach內核版本:Darwin Kernel版本13.0.0: 2013年9月19日星期四22:22:27 root:xnu-2422.1.72〜6 / RELEASE_X86_64最多可配置4個處理器的內核2個處理器在物理上可用4個處理器在邏輯上可用處理器類型:i486(Intel 80486)處理器處於活動狀態:0 1 2 3主內存可用:8.00 GB默認處理器集:195個任務,961個線程,4個處理器平均負載:1.61,馬赫數:2.38
此命令的優點是它也預裝了10.9安裝程序,位於下/ usr / bin
,因此非常方便,
理想情況下,如果您只想要RAM,則發出:
$ hostinfo | grep內存
雖然不知道hostinfo是否在以前的任何操作系統上都存在...
top -l 1 -s 0 |awk'/ Processes / ||/ PhysMem / ||/ Load Avg / {print}'
這應該很好:)
我認為這些天來, psutil
及其 meminfo.py
腳本提供了最有用的內存使用方式細節。嘗試一下:
pip install psutil
curl -O https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py
python ./meminfo.py
它產生的輸出如下:
MEMORY
------
總計:16.0G
可用:5.5G
百分比:65.8
二手:13.5G
免費:1.5G
運作中:7.4G
閒置:4.0G
有線的:2.1G
交換
----
總計:1.0G
二手:33.5M
免費:990.5M
百分比:3.3
罪惡:15.9G
出口:71.6M
請注意 Available
行,該行顯示了的估算值,無需交換即可實際啟動新應用程序可用的內存量。
我不知道其他任何提供可用內存估計的MacOS實用程序。
為了進行比較:在Linux系統上, free
當前版本的輸出中的 available
列中提供了相同類型的信息:
可用總可用免費共享buff /緩存
內存:7.8G 552M 182M 156M 7.1G 6.9G
掉期:0B 0B 0B
總計:7.8G 552M 182M
免費輸出中的可用
列僅來自 / proc / meminfo
中的 MemAvailable
。在具有 / proc / meminfo
的系統上, psutil也僅使用它來估計可用內存。
但是MacOS沒有 / proc / meminfo
,因此要估算這種情況下的可用內存, psutil採用與Linux上相同的算法為 / proc / meminfo
計算 MemAvailable
。
這在我的$ PS1上運行:
https://github.com/vigo/dotfiles-universal/blob/master/prompts/free_memory
(Ruby版本: https://github.com/vigo/dotfiles-universal/blob/master/prompts%2Ffree_memory.rb)
這是該博文的第二次重發。一開始,我有兩個 -1
。一種是因為我沒有用英語描述,所以已將其更正。另一個原因是我使用了 gawk
(這不是標準OS X安裝的一部分),因此也已得到糾正,因此我現在使用了 awk
。 -2
仍然在那裡;-)。最好的辦法也許就是現在來測試和評估其本身的命令嗎?
我回顧了我的第一個想法,即只構建一個以友好和高度可配置的顯示方式面向最終用戶的命令,我做了兩個:
free-like.sh
始終面向“最終用戶”的腳本,具有更高的準確性,“友好的”和可配置的顯示,但具有更多的計算和資源消耗,
free-like-raw.sh
,現在是面向開發人員,sysadmin等的命令,具有較少的計算量和資源消耗,但是
物理內存的數據是從命令 vm_stat
的結果中提取的(其中以塊大小返回結果)。轉換產生的字節數不精確(number_of_blocks * block_size,計算的默認值)將在塊大小的0 <之間。虛擬內存的數據取自 top
命令。這裡的不精確度與 top
命令的參考單位有關:千,兆,兆。
使用 awk
進行計算時要考慮四捨五入(與 bc
相對)。 awk
也比 bc
快。您可以在此處查看測試腳本: http://myblog.robert.sebille.name/article29.html#awk- bc
對於free-like.sh,您可以查看命令的結果(以字節為單位)(默認),以千,兆或千兆為單位,帶有x小數位,如果您詢問以兆歐千兆顯示。
腳本的篇幅太長,但您可以在我的博客文章中找到它們: http://myblog.robert.sebille.name/article29.html
本文為法文,但顯示了每個命令及其集成幫助的顯示示例( ./ free-like.sh -h
和 ./ free-like- raw.sh -h
),以英語顯示。這些幫助完全描述了命令。該文章還顯示代碼。
英語不是我的母語。如果有人要糾正集成幫助中的錯誤,歡迎您;)。
您的用戶。
vm_stat
以千字節為單位顯示。
下面的單行以兆字節為單位顯示:
粘貼<(vm_stat | awk'NR>1'| grep -o“。*:”)<(用於$(vm_stat | awk'NR>1'| tr -d'。'| awk'{print $ NF}')中的i);執行perl -e“ print $ i / 1024 “ | awk'{printf”%0.2f“,$ 0}';回顯;完成)|列-s:-t
返回:
可用頁面數11.06有效頁面數798.25非活動頁面776.03可推測的頁面數9.15受限制的頁面數0.00向下佈線的頁面數303.27可清除的頁面數0.95“翻譯錯誤” 82172.66Pages寫入時復制11629.60Pages零填充27685.41Pages已重新激活1450.70Pages清除了91.66由文件支持的頁面430.20匿名頁面1153.24Pages存儲在壓縮機中481.75Pages被壓縮機149.91佔用的壓縮量1277.92Compressions 1622.61Pageinsouts 13的佔位率。 54.34掉期90.63
如果您在osx上使用fishshell以及fisher的軟件包管理器,則為
。我寫了以下擴展名: https://github.com/fisherman/free
這是osx的free命令的完整重做。自己看看
>免費
總共使用了免費的appmem有線壓縮
內存:8.00Gb 6.65Gb 1.95Gb 2.87Gb 2.09Gb 1.86Gb
+/-緩存:1.24Gb 1.87Gb
掉期(43%):2048Mb 877Mb 1171Mb
平均負載:1.63 1.95 1.95
top或htop也可以幫助解決問題。