标签归档:swap

教你檢查Raspberry Pi 4的記憶體大小

想知道手邊的 Raspberry Pi 4的記憶體大小,可以在終端機中下指令查詢,也可以直接觀察硬體的差異。

Raspberry Pi 4 不同於以往,發行了三款記憶體大小不同的版本,來滿足不同客群的需求,想要知道手邊的Raspberry Pi 4的記憶體大小。除了可以在終端機中下指令查詢,也可以直接觀察硬體的差異。

本文大綱

  • 不同版本的Raspberry Pi 4硬體外觀差異
  • 查詢記憶體大小及使用量
  • 改變Swap交換空間大小

不同版本的Raspberry Pi 4硬體外觀差異

不同版本的黑色記憶體上會顯示不同文字

  • 1GB – 一個QRcode+文字
  • 2GB – 美光logo+文字 (重點文字差異:D9WHZ)
  • 4GB – 美光logo+文字 (重點文字差異:D9WHV)

查詢記憶體大小及使用量

打開Terminal輸入以下指令:

free -h

就可以看到有多少記憶體資源以及已經使用量。如下圖範例中,可用的資源為1.7GB,可以看出使用的Raspberry Pi 4是2GB記憶體版本。

Mem 那一列包含的資訊如下:

  • Total:開發板的記憶體量。
  • Used:記憶體總量減Free、Buffers、Cache的總和。
  • Free:未使用的記憶體量。
  • Shared:tmpfs文件系統使用的記憶體量。
  • Buff / cache:用於緩衝區和緩存的記憶體量。
  • Available:可用於處理來自應用程式和其他任何運行軟體的記憶體量估計。

Swap 那一列包含的資訊如下:

  • Total:交換分區或文件的大小,可以看到預設的大小為100MB。
  • Used:正在使用的交換空間量。
  • Free:未使用的交換空間量。

改變Swap交換空間大小

如果買的是1GB的樹梅派,有時候會覺得因為記憶體不足而有延遲或是當機。使用記憶卡的空間做swap交換空間雖然效能可能沒有實體記憶體好,但可以改善這個問題。

由於樹梅派原本預設已經配置100MB的swap,你可以參考以下步驟來增加swap交換空間的大小。

Step 1. 先暫停swap服務

在Terminal中輸入以下指令:

sudo dphys-swapfile swapoff

Step 2. 使用你喜愛的編輯器改變設定文件中的swap大小

在terminal中輸入以下指令,本範例中使用nano編輯器:

sudo nano /etc/dphys-swapfile

找到CONF_SWAPSIZE變數,原本為

CONF_SWAPSIZE=100

這裡的單位為MB,可以將此行註解掉,改成1024MB,也就是1GB的swap空間。

CONF_SWAPSIZE=1024

你也可以直接註解掉不要加新的設定,讓開發板自行計算適當的swap大小。

改好後記得存檔退出。

Step 3. 初始化 swapfile

sudo dphys-swapfile setup

Step 4. 重新啟動swap服務

sudo dphys-swapfile swapon

Step 5. 檢查swap狀態

可以同樣在Terminal中使用以下指令

free -h

再看一次資源分配的情況。

也可以使用以下指令僅看swap狀態

swapon -s
sudo systemctl enable dphys-swapfile.service

祝大家都可以順暢的使用樹梅派!

linux服务器创建swap

如果你想提高你的服务器的性能,增加交换空间(内存交换)是一个强大的和相对简单的开始。

swap介绍

一旦内存快满的时候,交换空间是一个专用的服务器可以在其内存转储的内容的硬盘。要理解的真正好处,您需要熟悉处理器架构,但这里有一个简要的说明:

  • RAM处理器快速提供数据,这使得它非常有价值。
  • 一旦你的内存满是它需要删除或移动数据。
  • 删除内存的数据意味着它必须找到和检索的硬盘(缓慢)下次请求的数据。
  • 通过将数据从内存和交换空间,而不是简单地删除它从RAM,更快找到下一次的数据请求。
  • 从内存到交换空间移动数据消耗处理器资源,这样做实际上不断会降低应用程序的性能(这就是所谓的交换)。为了找到最优交换率,它需要调优。

最后———虽然差异是分钟,为了清楚起见,本文将指导您通过创建一个交换文件——不是一个交换分区。如果你不知道这意味着什么,别担心。

检查当前使用交换空间

防止添加交换时有任何问题,首先检查你的系统没有启用已经交换空间。

找到任何交换空间驱动:

sudo swapon -s

如果结果是空的,输出类似于下面的例子,你目前没有交换空间启用:

Filename                Type        Size    Used    Priority

如果您的系统是否已经配置了交换,结果看起来像这个例子:

Filename           Type         Size      Used  Priority
/dev/sda7          partition    123450    100   -1

检查你的可用空间

现在,您已经准备好创建一个交换文件,你需要找到你的服务器的硬盘空间。

检查服务器上的可用空间量:

df -h

这个命令显示了硬盘上的自由空间。在接下来的例子中,你有40 GB可用。确保有足够的自由空间交换文件。取决于你的需求所需要的空间,但一般来说,相当于系统RAM的二倍。

Filesystem      Size  Used Avail Use% Mounted on    
/dev/vda         50G  10G   40G   20% /             
none            4.0K     0  4.0K   0% /sys/fs/cgroup  
udev            2.0G   12K  2.0G   1% /dev           
tmpfs           396M  312K  396M   1% /run    
none            5.0M     0  5.0M   0% /run/lock  
none            2.0G     0  2.0G   0% /run/shm  
none            100M     0  100M   0% /run/user      

创建一个交换文件

将交换空间添加到系统通过创建一个名为swapfile的文件在你的根目录(/)和分配它作为交换。有两个命令,您可以使用它来创建交换文件:

  • fallocate
  • dd

你只需要使用其中的一个。我们建议使用fallocate,但如果它不支持的文件系统上,您可以使用dd。

你可以获得更多的文件空间使用fallocate,fallocate是一个用于操作文件空间的命令。fallocate命令创建了一个预先分配大小并且没有初始化的文件,与dd命令相比,它需要更长的时间,因为它必须写入0作为虚拟内容。

使用fallocate创建一个交换文件

创建用于交换的文件。对于这个示例,我们添加一个4 GB的文件:

#4G
sudo fallocate -l 4G /swapfile

#1G
sudo fallocate -l 1G /swapfile

#512MB
sudo fallocate -l 512M /swapfile

确认正确的数量的空间被保留:

#确认
ls -lh /swapfile

这个结果表明,添加文件是使用正确的留出的空间量:

-rw------- 1 root root 4.0G Jul 08 10:52 /swapfile

如果你得到一个失败消息说fallocate失败:操作不支持,您的文件系统目前不支持fallocate(例如,ext3)。使用更传统的方式使用dd命令。(这种情况应该很少)。

使用dd创建一个交换文件

在这个例子中,我们将添加一个不同大小的交换文件,1 GB,为了适应小型服务器。

添加1 GB交换文件,通过指定一个块大小250MB并且数量为4。

记得要仔细检查你的指令!这个命令有可能破坏数据如果(输出文件)指出错误的位置。

#1G
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

#512M
sudo dd if=/dev/zero of=/swapfile bs=1M count=512

几秒钟后,生成的输出是这样的:

4+0 records in
4+0 records out 
1048576000 bytes (1.0 GB) copied, 1.47414 s, 711 MB/s

验证文件在服务器上创建:

ls -lh /swapfile

如果文件被创建,命令返回类似于:

-rw-r--r-- 1 root root 1.0G Jul 08 10:30 swapfile

使交换文件

现在创建的文件,格式互换,然后启用它。

锁定交换文件的权限,因此只有root用户可以访问它:

#权限
sudo chmod 600 /swapfile

当第一次创建时,交换文件是可读的,所以锁权限可以防止用户阅读潜在的敏感信息。

确认文件正确的权限:

ls -lh /swapfile

这个命令返回类似于:

-rw------- 1 root root 4.0G Jul 08 10:40 /swapfile

这证实了,只有root用户启用了读写权限。

格式文件创建一个交换空间:

#创建
sudo mkswap /swapfile

如果成功,该命令会返回类似这样:

Setting up swapspace version 1, size = 4194300 KiB 
no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944

挂载/启用系统中的交换空间:

#挂载
sudo swapon /swapfile

验证交换空间是通过检查系统报告:

#验证
sudo swapon -s

这个命令返回类似于:

Filename Type Size Used Priority 
swapfile file 4194300 0 -1

使交换文件永久生效

最后一步是将交换文件集成到您的系统的存储分区,通过fstab

打开fstab

#写入
sudo vim /etc/fstab

在fstab文件最后,添加这一行告诉系统自动使用新创建的交换空间:

#增加这一行
/swapfile none swap sw 0 0

保存并关闭该文件:

:wq!

在下次重新启动后,自动交换使用

调整交换文件

现在您已经创建了交换文件,你应该进行调优,以确保它给你最佳性能。这不是你可以轻松地一口气就完成的工作,而是你会定期的作为管理员工作。

优化你的交换文件意味着修补的设置,使其执行交换(也就是说,将内容从RAM交换):

  • 虚拟运存控制
  • 缓存压力
    调优是很重要的,因为一个配置不佳的交换文件会损害应用程序的性能。系统的RAM和交换空间之间的相互作用是时间密集的(在计算规模上),并且尝试交换频率太高(即交换冲突)可能需要更多的时间,而不仅仅是从硬盘中恢复数据。

虚拟运存控制

Swappiness只是设置控制频率使用交换文件。

一个0到100之间的比例,swappiness值:

  • 0意味着避免交换过程的物理内存,直到绝对必要的(内存耗尽)
  • 100意味着积极(立刻)移动交换过程的物理内存和交换缓存

你可以改变你的服务器的swapinesssysctl.conf文件中。

打开/etc/sysctl.conf:

sudo vim /etc/sysctl.conf

在文件的最后一行添加:

vm.swappiness=10

保存并且退出:

:wq!

来优化您的应用程序中,您可以测试更改swappiness值(0到100之间)和运行性能测试。

缓存压力

另一个设置是vfs_cache_pressure。 当VFS(虚拟文件系统)缓存对象(称为dentry和inode_cache对象)占用更大量的内存而不是其他数据(如页面缓存和交换)时,更改此设置可能会有所帮助。 因为VFS缓存访问有关文件系统的数据,所以经常被请求并且非常耗资源。 因此,它是您的系统缓存的主要设置。

vfs_cache_pressure的值越高,您的服务器越有可能使用其交换。

你可以改变你的服务器的缓存压力在sysctl.conf

打开/etc/sysctl.conf:

sudo vim /etc/sysctl.conf

在文件最后一行添加:

vm.vfs_cache_pressure = 50

保存并关闭文件:

:wq!

swappiness,你可以提高性能通过测试不同的值。

启用交换空间

使用以下三个命令检查您的工作:

swapon -s命令:

sudo swapon -s

输出可能如下所示:

Filename                Type        Size    Used    Priority 
/swapfile               file        4194300 0       -1

您会看到添加了4 G的交换文件。

有关更详细的报告:

free -m

关于交换详细信息的报告:

cat /proc/meminfo | grep -i swap

结论

交换可以有利于允许您的系统利用比原来可用的更多的内存。 在优化应用程序配置,添加更多RAM或升级服务器之前,这是一个可行的选择。

但是,请务必记住定期调整交换文件,以确保您最充分地使用它。

在CentOS 7上添加Swap交换空间

检查系统的Swap信息

首先我们需要检查系统的存储,看看是否已经配置过swap。一个系统可以设置多个swap文件或分区,不过一般来说一个就够了。

使用swapon命令可以检查系统是否已经配置过swap,这是一个通用的swap工具。使用-s标签可列出当前存储设备上的swap使用情况:

swapon -s

如果该命令没有返回出结果,则代表该系统尚未配置过swap。

或者,我们也可以使用free工具来查看系统的整体内存使用情况,这里可以看到内存和swap的使用状态(显示单位为MB):

free -m


             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:            0          0       4095

这里可以看到我们这个系统的total swap空间为0,即没有配置过swap。这与我们在swapon里看到的结果相符合。

检查可用的存储空间

通常,我们建立一个单独的分区作为swap。然而有时候由于硬件或软件的限制,新建分区的方式无法实现,这种情况下就可以建立一个swap文件来实现同样的功能。

开始之前,先检查一下磁盘的可用空间。输入如下指令:

df -h


Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        59G  1.5G   55G   3% /
devtmpfs        2.0G     0  2.0G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.3M  2.0G   1% /run
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

这里的-h标记是为了告诉dh将信息输出为对人类友好的格式,比如以MB或GB为单位输出空间使用和空余情况,而不是直接输出内存块的个数。

从第一行可以看到我们的存储分区上还有59GB的空间剩余,这足够我们操作了。(我这是一台中等规模的新建云主机,每个人的情况可能有很大不同。)

合适的swap空间是多大?关于这个问题有很多种选择,这取决于你的应用需求和你个人的偏好。一般来说,内存容量的两倍就是个不错的起点。

我的系统内存有4GB,如果设置8GB的swap会占据太多空间,所以我决定只设置4GB就好。

创建Swap文件

接下来我们将在文件系统上创建swap文件。我们要在根目录(/)下创建一个名叫swapfile的文件,当然你也可以选择你喜欢的文件名。该文件分配的空间将等于我们需要的swap空间。

最快捷的创建方式是fallocate命令,该命令能够创建一个预分配指定大小空间的文件。输入如下指令创建一个4GB的文件:

sudo fallocate -l 4G /swapfile

输入密码后,该swap文件将立即创建完毕。我们可以用ls命令检查文件大小:

ls -lh /swapfile


-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile

至此,我们的swap文件就创建完毕了。

启用Swap文件

现在我们已经有了swap文件,但系统还不知道应该使用该文件作为swap,这就需要我们告知系统将该文件格式化为swap并启用起来。

首先我们需要更改swap文件的权限,确保只有root才可读,否则会有很大的安全隐患。使用chmod命令进行权限操作:

sudo chmod 600 /swapfile

如此,该文件的读写都只有root才能操作。使用ls -lh命令检查一下:

ls -lh /swapfile


-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile

然后,使用如下命令告知系统将该文件用于swap:

sudo mkswap /swapfile


Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf

现在,这个swap文件就可以作为swap空间使用了。输入如下命令开始使用该swap:

sudo swapon /swapfile

我们可以输入如下命令来确认一下设置是否已经生效:

swapon -s


Filename                Type        Size    Used    Priority
/swapfile               file        4194300 0     -1

可以看到返回的结果中已经有我们刚才设置的swap。再使用free工具确认一下:

free -m


             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:         4095          0       4095

至此,我们的swap已经设置完毕,操作系统会在需要的时候使用它。

使Swap文件永久生效

至此我们已经在系统中启用了swap文件,然而一旦系统重启后,服务器还不能自动启用该文件。要让系统在重启后自动生效swap,我们可以通过修改fstab文件来实现(这是一个管理文件系统和分区的表)。

sudo权限打开该文件编辑:

sudo nano /etc/fstab

在文件末尾加入下面这行内容,告诉操作系统自动使用刚才创建的swap文件:

/swapfile   swap    swap    sw  0   0

添加完毕后,保存退出。以后服务器每次重启都会检查该文件并自动启用swap。

更改Swap配置(可选)

有几个涉及swap的选项可能会影响到系统的性能表现。大部分情况下这些选项是可选的,具体要修改成什么样则取决于你的应用需求以及个人偏好。

Swappiness

swappiness参数决定了系统将数据从内存交换到swap空间的频率,数值设置在0到100之间,代表系统将数据从内存交换到swap空间的力度。

该数值越接近于0,系统越倾向于不进行swap,仅在必要的时候进行swap操作。由于swap要比内存慢很多,因此减少对swap的依赖意味着更高的系统性能。

该数值越接近于100,系统越倾向于多进行swap。有些应用的内存使用习惯更适合于这种情况,这也于服务器的用途有关。

输入如下命令查看当前的swappiness数值:

cat /proc/sys/vm/swappiness


30

CentOS 7默认设置了30的swappiness,这对于大部分桌面系统和本地服务器是比较中庸的数值。对于VPS系统而言,可能接近于0的值是更加合适的。

使用sysctl命令可以修改swappiness。比如将swappiness设为10:

sudo sysctl vm.swappiness=10


vm.swappiness = 10

本次修改将一直生效到下次重启前。如果希望永久修改该数值,则需要编辑sysctl配置文件:

sudo nano /etc/sysctl.conf

将以下内容粘贴到文件末尾:

vm.swappiness = 10

编辑完成后,保存退出,之后服务器每次重启的时候会将swappiness设置为该值。

缓存压力(Cache Pressure )

另一个可以考虑更改的配置项是vfs_cache_pressure,该配置项涉及特殊文件系统元文件条目的存储。对此类信息的频繁读取是非常消耗性能的,所以延长其在缓存的保存时间可以提升系统的性能。

通过proc文件系统查看缓存压力的当前设定值:

cat /proc/sys/vm/vfs_cache_pressure


100

这个数值是比较高的,意味着系统从缓存中移除inode信息的速度比较快。一个保守一些的数值是50,使用sysctl命令进行设置:

sudo sysctl vm.vfs_cache_pressure=50


vm.vfs_cache_pressure = 50

这条命令仅在重启前有效。要让该设置永久有效,需要编辑sysctl配置文件:

sudo nano /etc/sysctl.conf

在文件末尾添加如下内容:

vm.vfs_cache_pressure = 50

保存退出,服务器就会在每次重启后都自动将缓存压力设置为50了。

总结

至此,我们的系统内存就获得了一些喘气的空间。有了swap空间可以有效避免一些常见的问题。

如果你仍然会遇到内存不足(OOM,out of memory)的错误信息,或者你的系统不能运行你需要的应用,那么最好的方法是优化你的应用配置或者升级你的服务器,不过配置swap空间也不失为一个灵活的节省方案。