在linux中,free是查看内存使用状态的内置命令,可以显示包括系统物理内存、虚拟内存(swap交换分区)、共享内存和系统缓存的使用情况,语法“free [选项]”;free命令的输出和top命令的内存部分非常相似。
本教程操作环境:linux7.3系统、Dell G3电脑。
free 命令用来显示系统内存状态,包括系统物理内存、虚拟内存(swap 交换分区)、共享内存和系统缓存的使用情况,其输出和 top 命令的内存部分非常相似。
free 命令的基本格式如下:
# free [选项]
表 1 罗列出了此命令常用的选项及各自的含义。
选项 | 含义 |
-b | 以 Byte(字节)为单位,显示内存使用情况。 |
-k | 以 KB 为单位,显示内存使用情况,此选项是 free 命令的默认选项。 |
-m | 以 MB 为单位,显示内存使用情况。 |
-g | 以 GB 为单位,显示内存使用情况。 |
-t | 在输出的最终结果中,输出内存和 swap 分区的总量。 |
-o | 不显示系统缓冲区这一列。 |
-s 间隔秒数 | 根据指定的间隔时间,持续显示内存使用情况。 |
free 命令可以显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。
如果加上 -h 选项,输出的结果会友好很多:
有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:
$ free -h -s 3
Arahan di atas mengeluarkan penggunaan memori setiap 3 saat sehingga anda menekan ctrl + c.
Memandangkan arahan percuma itu sendiri agak mudah, fokus artikel ini adalah tentang cara memahami penggunaan memori semasa sistem melalui arahan percuma.
Yang berikut menerangkan kandungan output:
Mem (baris kedua) ialah penggunaan memori. Baris
Swap (baris ketiga) ialah penggunaan ruang swap.
jumlah lajur memaparkan jumlah memori fizikal yang tersedia dan pertukaran sistem Saiz ruang.
digunakan lajur menunjukkan bahawa ia telah Memori fizikal dan ruang swap digunakan.
percuma Lajur menunjukkan jumlah memori fizikal dan ruang swap tersedia.
kongsi menunjukkan jumlah memori fizikal yang dikongsi.
buff/cache lajur menunjukkan saiz memori fizikal yang digunakan oleh penimbal dan cache.
tersedia lajur menunjukkan jumlah memori fizikal yang masih boleh digunakan oleh aplikasi.
Izinkan saya bertanya soalan dahulu: penimbal dan cache hendaklah dua jenis memori, tetapi mengapa arahan percuma ubah Bagaimana pula dengan meletakkan mereka bersama-sama? Menjawab soalan ini memerlukan sedikit persediaan. Mari kita jelaskan dahulu maksud penimbal dan cache. penampan
Dalam sistem pengendalian, ia merujuk kepada cache penimbal, yang biasanya diterjemahkan sebagai "penampan" dalam bahasa Cina. Untuk memahami penimbal, dua konsep lain mesti difahami: "sektor" dan
"keping". Sektor ialah unit pengalamatan terkecil peranti, juga dipanggil "sektor keras" atau "blok peranti". Blok ialah unit pengalamatan terkecil sistem fail dalam sistem pengendalian, juga dipanggil "blok fail" atau "I/O
"blok". Setiap blok mengandungi satu atau lebih sektor, tetapi tidak boleh lebih besar daripada halaman, jadi halaman boleh menyimpan satu atau lebih blok dalam ingatan Apabila blok dimuatkan ke dalam memori, ia disimpan dalam kawasan penimbal sepadan dengan blok, yang bersamaan dengan perwakilan blok cakera dalam ingatan (gambar di bawah adalah dari Internet): Perhatikan bahawa cache penimbal hanya mempunyai konsep blok dan bukan fail Ia hanya memindahkan blok pada cakera terus ke dalam memori tanpa mengambil kira format fail yang disimpan dalam blok cache merujuk kepada cache halaman dalam sistem pengendalian, yang biasanya diterjemahkan sebagai "cache halaman" dalam bahasa Cina Cache halaman ialah cache cakera yang digunakan oleh kernel untuk mengurangkan kesan pada operasi I/O Secara khusus, akses kepada cakera ditukar kepada akses kepada memori fizikal dengan menyimpan data dalam cakera menulis fail biasa, menyekat fail peranti (ini merujuk kepada cache penimbal) dan fail dipetakan memoriKita boleh memahami cache fail biasa oleh cache halaman seperti ini: apabila kernel Untuk membaca fail (seperti sebagai
/etc/hosts), ia akan terlebih dahulu menyemak sama ada data fail ini sudah ada dalam cache halaman. Jika ya, berhenti mengakses cakera dan baca terus dari memori. Tingkah laku ini dipanggil cache hit. Jika data tiada dalam cache, ini bermakna cache terlepas, dan kernel akan menjadualkan blok.
Operasi I/O membaca data daripada cakera. Kernel kemudian meletakkan data baca ke dalam cache halaman. Cache ini menyasarkan fail yang diiktiraf oleh sistem fail (seperti /etc/hosts). Kalau begitu kenapa
Bukankah arahan percuma dipanggil cache dan bukannya buff/cache? Ini kerana pelaksanaan cache penimbal dan halaman tidak bersatu secara semula jadi. dalam linux
Inti 2.4
Barulah mereka boleh bersatu. Terdapat dua cache cakera berasingan dalam kernel terdahulu: cache halaman dan cache penimbal. Halaman cache dahulu dan halaman cache yang terakhir penimbal. Sebaik sahaja anda mengetahui cerita itu, nama lajur dalam output mungkin tidak lagi penting. 在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别? swap
space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap
文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问
swap 上存储的内容时,再将 swap
上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。 现在的机器一般都不太缺内存,如果系统默认还是使用了
swap 是不是会拖累系统的性能?理论上是的,但实际上可能性并不是很大。并且内核提供了一个叫做 swappiness
的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。这个参数的取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到
swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。在
ubuntu 系统中,swappiness 的默认值是 60。如果我们觉着内存充足,可以在 /etc/sysctl.conf 文件中设置
swappiness: 如果系统的内存不足,则需要根据物理内存的大小来设置交换空间的大小。具体的策略网上有很丰富的资料,这里笔者不再赘述。 其实 free 命令中的信息都来自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只是看起来不太直观:
有兴趣的同学可以直接查看这个文件。 free 命令是一个既简单又复杂的命令。简单是因为这个命令的参数少,输出结果清晰。说它复杂则是因为它背后是比较晦涩的操作系统中的概念,如果不清楚这些概念,即便看了 free 命令的输出也 get 不到多少有价值的信息。 相关推荐:《Linux视频教程》buff/cache
Cache halaman cache bagi fail peranti sekat ialah buffer cahce yang kami perkenalkan sebelum ini. Kerana blok cakera individu juga disimpan dalam cache halaman melalui penimbal (penampan akhirnya dihoskan oleh cache halaman).
Pada ketika ini kita sepatutnya memikirkannya: sama ada ia adalah penimbal atau cache halaman, ia dilaksanakan dengan cara yang sama. Penampan hanyalah cache halaman khas secara konsep. free 与 available
free
是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux
内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和
cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache
中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。交换空间(swap space)
vm.swappiness=10
/proc/meminfo 文件
$ cat /proc/meminfo
总结
Atas ialah kandungan terperinci Apa yang percuma dalam linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!