Có phiên bản Mac OS X Terminal của lệnh miễn phí trên hệ thống Linux không?


194

Trên Linux, tôi thường sử dụng lệnh miễn phí để xem lượng bộ nhớ còn trống và đã sử dụng hiện tại trong hệ thống. Ví dụ:

$ free
             total       used       free     shared    buffers     cached
Mem:       7264256    1010952    6253304          0     371892     189088
-/+ buffers/cache:     449972    6814284
Swap:      8126456         28    8126428

Nó dường như không tồn tại khi tôi nhập vào freeTerminal của Mac OS X. Có một sự thay thế?

Câu trả lời:


92

Như @khedron nói , bạn có thể thấy thông tin này trong Activity Monitor.

Nếu bạn muốn nó trên dòng lệnh, đây là tập lệnh Python mà tôi đã viết (hoặc có lẽ đã được sửa đổi từ người khác, tôi không thể nhớ, bây giờ nó khá cũ) để hiển thị cho bạn số lượng bộ nhớ Có dây, Hoạt động, Không hoạt động và Miễn phí:

#!/usr/bin/python

import subprocess
import re

# Get process info
ps = subprocess.Popen(['ps', '-caxm', '-orss,comm'], stdout=subprocess.PIPE).communicate()[0].decode()
vm = subprocess.Popen(['vm_stat'], stdout=subprocess.PIPE).communicate()[0].decode()

# Iterate processes
processLines = ps.split('\n')
sep = re.compile('[\s]+')
rssTotal = 0 # kB
for row in range(1,len(processLines)):
    rowText = processLines[row].strip()
    rowElements = sep.split(rowText)
    try:
        rss = float(rowElements[0]) * 1024
    except:
        rss = 0 # ignore...
    rssTotal += rss

# Process vm_stat
vmLines = vm.split('\n')
sep = re.compile(':[\s]+')
vmStats = {}
for row in range(1,len(vmLines)-2):
    rowText = vmLines[row].strip()
    rowElements = sep.split(rowText)
    vmStats[(rowElements[0])] = int(rowElements[1].strip('\.')) * 4096

print 'Wired Memory:\t\t%d MB' % ( vmStats["Pages wired down"]/1024/1024 )
print('Active Memory:\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 ))

Như bạn có thể thấy, bạn chỉ có thể gọi vm_stattừ dòng lệnh, mặc dù nó được tính trong các trang 4kB, do đó tập lệnh để chuyển đổi thành MB.

Kịch bản cũng tính đến việc sử dụng "bộ nhớ thực" của tất cả các quy trình đang chạy để so sánh (điều này sẽ không khớp với bất kỳ giá trị cụ thể nào trong các thống kê bộ nhớ chung, vì bộ nhớ là một con thú phức tạp).


Đây là một ví dụ về đầu ra của tập lệnh trên hệ thống của tôi:

[user@host:~] % memReport.py
Wired Memory:           1381 MB
Active Memory:          3053 MB
Inactive Memory:        727 MB
Free Memory:            1619 MB
Real Mem Total (ps):    3402.828 MB

(được điều chỉnh rất ít để phù hợp với kích thước tab trên StackExchange;)


cách tốt nhất để sử dụng kịch bản này là gì?
iddober

2
không chắc chắn chính xác ý bạn là gì ... sao chép và dán nó vào một tệp mới, lưu nó ở đâu đó (có lẽ trong / usr / local / bin), làm cho nó có thể thực thi được và chạy nó?
drfrogsplat

Tôi nghĩ rằng @idober đã gợi ý bạn bao gồm một ví dụ về việc chạy nó và đầu ra được tạo ra (ví dụ: chụp màn hình)
AJ.

@AJ, ah ok, hiểu rồi
drfrogsplat

6
chỉ 2 xu của tôi:ps -caxm -orss= | awk '{ sum += $1 } END { print "Resident Set Size: " sum/1024 " MiB" }'
vault

70

Lệnh bạn cần là vm_stat- tương tự như công cụ Unix truyền thống vmstatnhưng có một vài khác biệt cụ thể của Mach. Trang người đàn ông được viết tốt.


2
'Trang' là gì?
DilithiumMatrix

8
@zhermes - Đơn vị bộ nhớ nhỏ nhất có thể sử dụng được bởi hệ thống ... trong trường hợp máy Mac x86 và PPC, đây là 4k. Số trang miễn phí là số lượng 4k đơn vị bộ nhớ miễn phí.
RI Swamp Yankee

2
Các trang cũng là 4K trong iOS.
smci

54

Có vẻ như lý do nó chậm là vì top -l 1luôn trì hoãn một giây sau khi hoàn thành, độ trễ chuẩn giữa các lần làm mới. Thêm -s 0 vào lệnh sẽ khiến nó hoàn thành ngay lập tức:

top -l 1 -s 0 | grep PhysMem

Ngoài ra, để rõ ràng, tôi thích hiển thị từng thành phần mem trên dòng của nó, vì vậy tôi đã thêm 9 khoảng trắng để căn chỉnh với 'PhysMem:' trong chuỗi thay thế sed:

top -l 1 -s 0 | grep PhysMem | sed 's/, /\n         /g'

1
Đó là con chó chậm, tốt hơn nhiều để sử dụng vm_stat.
mgol

3
Có, truy vấn topchậm hơn đáng kể khi gọi vm_statnhưng toptrích xuất ít dài dòng hơn và đơn vị là megabyte chứ không phải trang. Để thậm chí ít dài dòng hơn, các ngắt dòng có thể được loại bỏ và awkcó thể được thay thế bằng cách grepdẫn đến top -l 1 | grep ^PhysMem.
Stefan Schmidt

2
Tất cả những điều được xem xét, đây là câu trả lời tốt nhất. Không đưa ra kết quả trong pagecác đơn vị không có ích / yêu cầu một số loại hậu xử lý hacky để làm cho các đơn vị nói có thể hiểu được.
ijoseph

39

Đây là một lớp lót đơn giản để làm cho toàn bộ vm_statđầu ra thân thiện hơn với con người:

$ vm_stat | perl -ne '/page size of (\d+)/ and $size=$1; /Pages\s+([^:]+)[^\d]+(\d+)/ and printf("%-16s % 16.2f Mi\n", "$1:", $2 * $size / 1048576);'
free:                     2330.23 Mi
active:                   2948.07 Mi
inactive:                 1462.97 Mi
speculative:               599.45 Mi
wired down:                840.46 Mi
copy-on-write:           43684.84 Mi
zero filled:            385865.48 Mi
reactivated:               608.14 Mi

25

Trong trường hợp bạn chỉ thực sự quan tâm đến việc sử dụng trao đổi (dòng đầu ra cuối cùng từ đâu free):

$ sysctl vm.swapusage
vm.swapusage: total = 64.00M  used = 0.00M  free = 64.00M  (encrypted)

tôi đã tìm kiếm nó nhiều hơn rất nhiều :)
onalbi

20

Có một lệnh đầu cuối tương tự như freetrên Mac OS X ... nó được gọi làtop

Để biết thêm thông tin, bạn có thể xem tài liệu Hỗ trợ này của Apple.

Mac OS X: Cách xem sử dụng bộ nhớ với tiện ích "hàng đầu"


24
Nói một cách chính xác, "top" trên OS X khá giống với lệnh "top" của Linux, dĩ nhiên :)
calum_b

6
tốt hơn so với đầu trang:htop
nXqd

3
@nXqd htop: không tìm thấy lệnh
itazzad

4
@SazzadTusharKhan brew cài đặt htop nếu bạn đã cài đặt brew
nXqd

2
Về mặt kỹ thuật, chúng không giống nhau chút nào vì miễn phí in một thứ gì đó đẹp và gọn gàng cho dòng lệnh trong khi trên cùng là thứ bạn chủ động xem.
anon58192932

10

Chỉ cần lấy giải pháp từ @zack và thêm các khối không hoạt động và đầu cơ.

#!/bin/bash

FREE_BLOCKS=$(vm_stat | grep free | awk '{ print $3 }' | sed 's/\.//')
INACTIVE_BLOCKS=$(vm_stat | grep inactive | awk '{ print $3 }' | sed 's/\.//')
SPECULATIVE_BLOCKS=$(vm_stat | grep speculative | awk '{ print $3 }' | sed 's/\.//')

FREE=$((($FREE_BLOCKS+SPECULATIVE_BLOCKS)*4096/1048576))
INACTIVE=$(($INACTIVE_BLOCKS*4096/1048576))
TOTAL=$((($FREE+$INACTIVE)))
echo Free:       $FREE MB
echo Inactive:   $INACTIVE MB
echo Total free: $TOTAL MB

9
#!/bin/bash
top -l 1 | grep PhysMem: | awk '{print $10}'

Chỉ dành cho chuyên gia Unix:

top -l 1 | awk '/PhysMem:/ {print $10}'

1
Điều này không còn trả về bất kỳ kết quả nào trong macOS hiện đại.
Matt Sephton

sử dụng top -l1 | awk '/PhysMem/ {print $2}'trên macos> = High Sierra
JDS

Không trả lại bộ nhớ đã sử dụng
theillien

8
free="$(( $(vm_stat | awk '/free/ {gsub(/\./, "", $3); print $3}') * 4096 / 1048576)) MiB free"

1
Phiên bản hiện tại của lệnh đó không hoạt động đối với tôi tcsh(mặc định của tôi) hoặc sh. Là lệnh shell-cụ thể?
Graham Perrin

Vâng, nó là bashkshcụ thể. Trong tcshthử : set freeblocks=`vm_stat | grep free | awk '{ print $3 }' | sed 's/\.//'` ; set freeMB=`expr $freeblocks \* 4096 / 1048576`; set free=`echo $freeMB MiB free`. Sau đó, bạn có thể làm echo $freeđể in dung lượng bộ nhớ trống. Bạn cũng có thể tạo một bí danh : alias free echo $freeMB MiB free.
jaume

7

Đánh giá bằng câu hỏi khác của bạn , tôi nghĩ bạn đã tìm thấy việc sử dụng tiện ích Trình giám sát hoạt động để xem trạng thái bộ nhớ của mình, phải không? Chỉ để ghi lại, nó nằm trong / Ứng dụng / Tiện ích / Activity Monitor.app.


7

Không có tương đương chính xác được phân phối với Mac OS X, nhưng có một số cách khác để có được thông tin:

  1. system_profiler - Hiển thị tất cả thông tin Cấu hình Hệ thống của Mac trong trình bao
  2. sysctl -a | grep memhoặc sysctl hw.memsize(tổng số mem)

+1, hoạt động từ Terminal trong chế độ Recovery (cmd-r trong khi khởi động)
Steve Kehlet

7

Bạn có thể thử lệnh allmemorynếu bạn muốn một công cụ dòng lệnh báo cáo việc sử dụng bộ nhớ cực kỳ chi tiết.


1
Một công cụ mạnh mẽ, nhưng nó đòi hỏi nhiều bộ xử lý (khoảng 95% một trong hai CPU trên MacBookPro5,2 của tôi) và nếu sử dụng nhiều bộ nhớ: một lần chạy đơn giản allmemorycó thể kéo dài bất ngờ - đối với tôi hôm nay, hơn bốn phút mỗi lần chạy, YMMV. Một chạy của allmemorycho sysdiagnosecó thể mất nhiều thời gian hơn.
Graham Perrin

6

Trên đây là quá nhiều nỗ lực theo ý thích của tôi và nó giả định rằng bạn cũng đã cài đặt đầy đủ ... Nếu bạn đã khởi động từ đĩa khởi động Mac OS X, thì tất cả các giải pháp trên rõ ràng sẽ không hoạt động. .. Chỉ cần sử dụng lệnh "hostinfo", đây là đầu ra từ MBAir giữa năm 2012 của tôi đang chạy Mavericks (10.9.1):

 Mach kernel version:
 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64
Kernel configured for up to 4 processors.
2 processors are physically available.
4 processors are logically available.
Processor type: i486 (Intel 80486)
Processors active: 0 1 2 3
Primary memory available: 8.00 gigabytes
Default processor set: 195 tasks, 961 threads, 4 processors
Load average: 1.61, Mach factor: 2.38

Điểm hay của lệnh này là nó được cài đặt sẵn với trình cài đặt 10.9 bên dưới /usr/bin, vì vậy nó rất tiện dụng,

lý tưởng, nếu bạn chỉ muốn RAM thì phát hành:

$ hostinfo | grep memory

Không biết hostinfo có tồn tại trên bất kỳ HĐH nào trước đó không ...


4
Làm thế nào để hostinfohiển thị bộ nhớ được sử dụng ?
nohillside

3
lệnh này (ít nhất là ở đây trong HĐH 10.6.8) chỉ hiển thị bộ nhớ khả dụng, nhưng không phải là bao nhiêu hiện đang được sử dụng
Chủ yếu là không có

Điều đó có nghĩa là điều này không thực sự trả lời câu hỏi được hỏi vì nó nói rõ rằng nó mong muốn "bộ nhớ miễn phí và được sử dụng".
b4hand


3

Tôi nghĩ những ngày này, psutilmeminfo.pykịch bản của nó cung cấp các chi tiết sử dụng bộ nhớ hữu ích nhất. Để thử nó:

pip install psutil
curl -O https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py
python ./meminfo.py

Đầu ra mà nó tạo ra trông như thế này:

MEMORY
------
Total      :   16.0G
Available  :    5.5G
Percent    :    65.8
Used       :   13.5G
Free       :    1.5G
Active     :    7.4G
Inactive   :    4.0G
Wired      :    2.1G

SWAP
----
Total      :    1.0G
Used       :   33.5M
Free       :  990.5M
Percent    :     3.3
Sin        :   15.9G
Sout       :   71.6M

Lưu ý Availablehàng, trong đó cho thấy ước tính có bao nhiêu bộ nhớ thực sự có sẵn để bắt đầu các ứng dụng mới , mà không cần trao đổi.

Tôi không biết bất kỳ tiện ích MacOS nào khác cung cấp ước tính bộ nhớ khả dụng đó.

Để dễ so sánh: Trên một hệ thống Linux, cùng loại thông tin được cung cấp trong availablecột trong đầu ra từ các phiên bản hiện tại của free:

              total        used        free      shared  buff/cache   available
Mem:           7.8G        552M        182M        156M        7.1G        6.9G
Swap:            0B          0B          0B
Total:         7.8G        552M        182M

availableCột đó trong freeđầu ra chỉ đến từ MemAvailabletrong /proc/meminfo. Và trên các hệ thống có /proc/meminfo, psutil cũng chỉ sử dụng điều đó để ước tính bộ nhớ khả dụng.

Nhưng hệ điều hành MacOS không có /proc/meminfo, vì vậy để ước lượng bộ nhớ có sẵn trong trường hợp đó, psutil sử dụng cùng một thuật toán được sử dụng trên Linux để tính toán MemAvailablecho/proc/meminfo .


3

Bạn có thể thử memory_pressurelệnh. Xem đầu ra của hệ thống của tôi (i5, RAM 4 GB)

The system has 2147483648 (524288 pages with a page size of 4096).

Stats: 
Pages free: 90009 
Pages purgeable: 139593 
Pages purged: 7496548 

Swap I/O:
Swapins: 470466 
Swapouts: 530913 

Page Q counts:
Pages active: 407739 
Pages inactive: 148277 
Pages speculative: 16200 
Pages throttled: 0 
Pages wired down: 263064 

Compressor Stats:
Pages used by compressor: 122815 
Pages decompressed: 7327420 
Pages compressed: 17625795 

File I/O:
Pageins: 1538997 
Pageouts: 86692 

System-wide memory free percentage: 63%

2

Bash lệnh "miễn phí như" cho Mac OSX.

Đây là lần phát hành lại thứ hai của bài đăng này. Lúc đầu, tôi có hai cái -1. Một vì tôi đã không mô tả bằng tiếng Anh, nó đã được sửa. Khác bởi vì tôi đã sử dụng gawk(không phải là một phần của cài đặt OS X tiêu chuẩn), nó cũng được sửa chữa, bây giờ tôi sử dụng awk. Các -2vẫn còn ở đó ;-). Tốt nhất có lẽ là bây giờ để kiểm tra và đánh giá các lệnh nó?

Tôi đã xem xét ý tưởng đầu tiên của mình để chỉ xây dựng một lệnh hướng đến người dùng cuối với màn hình thân thiện và có cấu hình cao, tôi đã thực hiện hai:

  • free-like.sh một tập lệnh luôn định hướng "người dùng cuối", với độ chính xác cao hơn, màn hình "thân thiện" và có thể định cấu hình, nhưng với nhiều tính toán và tiêu thụ tài nguyên hơn,

  • free-like-raw.sh, một nhà phát triển theo định hướng bây giờ, sysadmin, v.v., với ít tính toán và tiêu thụ tài nguyên, nhưng cũng có độ chính xác thấp hơn, hiển thị "thân thiện" hơn.

Dữ liệu cho bộ nhớ vật lý được trích xuất từ ​​kết quả của lệnh vm_stat(trả về kết quả theo kích thước khối). Sự không chính xác dẫn đến việc chuyển đổi theo byte (number_of_blocks * block_size, giá trị mặc định của các phép tính) sẽ nằm trong khoảng 0 <kích thước của khối. Dữ liệu cho bộ nhớ ảo được lấy từ toplệnh. Sự không chính xác ở đây được liên kết với đơn vị tham chiếu của toplệnh: kilo, mega, giga.

Các tính toán được thực hiện bằng cách sử dụng awkcác khía cạnh được làm tròn (trái ngược với bc). awkcũng nhanh hơn bc. Bạn có thể xem tập lệnh thử nghiệm tại đây: http://myblog.robert.sebille.name/article29.html#awk-bc

Bạn có thể xem kết quả của các lệnh theo byte (mặc định), tính bằng kilo, mega hoặc giga, với x vị trí thập phân trong trường hợp free-like.sh và nếu bạn yêu cầu hiển thị theo mega ou giga.

Các tập lệnh quá dài cho một bài viết, nhưng bạn có thể tìm thấy chúng trên bài viết này của blog của tôi: http://myblog.robert.sebille.name/article29.html

Bài viết bằng tiếng Pháp, nhưng nó hiển thị một ví dụ về hiển thị cho mỗi lệnh và trợ giúp tích hợp ( ./free-like.sh -h./free-like-raw.sh -h) của chúng, bằng tiếng Anh. Những hỗ trợ này mô tả hoàn toàn các lệnh. Các bài viết cũng hiển thị các mã.

Tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi. Nếu ai đó muốn sửa lỗi trong trợ giúp tích hợp, anh ta được chào đón;).

của bạn.


Bên cạnh việc ai đó ít nhiều không thể sử dụng được mà không có bất kỳ kiến ​​thức nào về tiếng Pháp, tập lệnh của bạn dường như yêu cầu gawkkhông phải là một phần của bản cài đặt OS X tiêu chuẩn.
nohillside

@patrix: Cảm ơn bạn đã phản hồi, tôi sẽ mô tả bằng tiếng Anh và tôi cũng sẽ dịch trợ giúp tích hợp (hiện bằng tiếng Pháp). gawk: thực sự, tôi quên, cảm ơn bạn. Tôi đã gặp một số vấn đề nội địa hóa (dấu phẩy thập phân hoặc dấu thập phân) với awk. Họ biến mất mà không biết tại sao. Tôi trở lại awk thay vì gawk. Tôi cần một chút thời gian để điều chỉnh mọi thứ, tôi sẽ đăng lại khi nó sẵn sàng. Của bạn.
Robert

1
Đơn giản chỉ cần thay thế gawk bằng awk làm việc cho tôi mà không có vấn đề.
nohillside

2

1
Câu trả lời trên Hỏi khác nhau không chỉ là một liên kết. Bạn có thể bao gồm một liên kết, nhưng vui lòng tóm tắt hoặc trích dẫn nó trong câu trả lời. Ý tưởng là làm cho câu trả lời đứng một mình.
nohillside

1

vm_stat cho bạn thấy trong kilobyte.

Oneliner dưới đây hiển thị bằng megabyte:

paste <(vm_stat | awk 'NR>1' | grep -o ".*:") <(for i in $(vm_stat | awk 'NR>1' | tr -d '.' | awk '{print $NF}'); do perl -e "print $i/1024" | awk '{printf "%0.2f", $0}'; echo; done) | column -s: -t

Trả về:

Pages free                      11.06
Pages active                    798.25
Pages inactive                  776.03
Pages speculative               9.15
Pages throttled                 0.00
Pages wired down                303.27
Pages purgeable                 0.95
"Translation faults"            82172.66
Pages copy-on-write             11629.60
Pages zero filled               27685.41
Pages reactivated               1450.70
Pages purged                    91.66
File-backed pages               430.20
Anonymous pages                 1153.24
Pages stored in compressor      481.75
Pages occupied by compressor    149.91
Decompressions                  1277.92
Compressions                    1622.33
Pageins                         13198.02
Pageouts                        66.61
Swapins                         54.34
Swapouts                        90.63

1

Nếu bạn sử dụng vỏ cá trên osx, cùng với người quản lý gói của nó.

Tôi đã viết phần mở rộng sau: https://github.com/fisherman/free

Đó là một bản làm lại hoàn toàn của lệnh miễn phí cho osx. Tự mình xem

> free
                 total     used     free   appmem    wired   compressed
Mem:            8.00Gb   6.65Gb   1.95Gb   2.87Gb   2.09Gb   1.86Gb
+/- Cache:               1.24Gb   1.87Gb
Swap(43%):      2048Mb    877Mb   1171Mb
Load Avg:        1.63 1.95 1.95

Đẹp. Ngay lập tức đặt biệt danh cho nó.
PeterVP

-1

đầu hoặc htop cũng có thể giúp giải quyết vấn đề.


Chào mừng bạn đến hỏi khác nhau. Vui lòng cung cấp thêm thông tin về cách các lệnh bạn tham khảo trả lời câu hỏi.
tubedogg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.