Linux에서 물리적 메모리는 시스템 하드웨어가 제공하는 메모리 크기, 즉 실제 메모리를 의미합니다. Linux의 메모리 관리는 물리적 메모리를 완전히 활용할 수 있도록 페이징 액세스 메커니즘을 채택합니다. 커널은 적절한 시간에 물리적 메모리에서 자주 사용되지 않는 데이터 블록을 가상 메모리로 자동 교체하고 자주 사용되는 데이터 블록은 자동으로 교체됩니다. 적절한 시간에 가상 메모리에 정보가 물리적 메모리에 유지됩니다.
이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.
우리 모두는 메모리에서 직접 데이터를 읽고 쓰는 것이 하드 디스크에서 데이터를 읽고 쓰는 것보다 훨씬 빠르다는 것을 알고 있으므로 모든 데이터를 메모리에서 읽고 쓰는 것이 바람직합니다. 그러나 메모리는 제한되어 있으므로 물리적 메모리와 가상 메모리의 개념이 발생합니다.
물리적 메모리는 시스템 하드웨어에서 제공하는 메모리 크기, 즉 실제 메모리입니다. Linux에는 물리적 메모리와 비교하여 가상 메모리라는 개념도 있습니다. 가상 메모리는 물리적 메모리 부족을 해결하기 위해 제안된 전략입니다. 디스크 공간을 사용하여 가상화된 논리적 메모리입니다. 가상 메모리로 사용되는 디스크 공간을 스왑 공간(스왑 공간이라고도 함)이라고 합니다.
물리적 메모리의 확장으로, Linux는 물리적 메모리가 부족할 때 스왑 파티션의 가상 메모리를 사용합니다. 보다 구체적으로 커널은 임시로 사용되지 않은 메모리 블록 정보를 스왑 공간에 기록합니다. 일단 해제되면 이 메모리는 다른 목적으로 사용될 수 있습니다. 원본 콘텐츠가 필요할 때 정보는 스왑 공간에서 물리적 메모리로 다시 읽혀집니다.
Linux의 메모리 관리는 물리적 메모리를 완전히 활용할 수 있도록 페이징 액세스 메커니즘을 채택합니다. 커널은 물리적 메모리에서 자주 사용되지 않는 데이터 블록을 적절한 시간에 자동으로 가상 메모리로 교체합니다. 적절한 시점에 자동으로 가상 메모리로 스왑되어 사용된 정보는 물리적 메모리에 유지됩니다.
Linux 메모리 작동 메커니즘을 깊이 이해하려면 다음 측면을 알아야 합니다.
우선, Linux 시스템은 여유 물리적 메모리를 최대한 유지하기 위해 수시로 페이지 스왑 작업을 수행합니다. 아무것도 없더라도 가능합니다. 메모리가 필요한 것에는 Linux도 일시적으로 사용하지 않는 메모리 페이지를 교체합니다. 이렇게 하면 교체를 기다리는 데 필요한 시간을 크게 절약할 수 있기 때문입니다.
두 번째로, Linux의 페이지 스와핑은 조건부입니다. 사용하지 않을 때 모든 페이지가 가상 메모리로 스와핑되는 것은 아닙니다. Linux 커널은 "가장 최근에 사용한" 메모리에 따라 자주 사용되지 않는 일부 페이지 파일만 가상 메모리로 스와핑합니다.
때때로 이러한 현상을 볼 수 있습니다. Linux에는 여전히 물리적 메모리가 많지만 스왑 공간도 많이 사용됩니다. 사실 이는 놀라운 일이 아닙니다. 예를 들어, 메모리 자원을 많이 차지하는 프로세스가 실행 중에 메모리 자원을 많이 소모하는 경우, 자주 사용되지 않는 일부 페이지 파일은 가상 메모리로 스왑되지만 나중에 메모리 자원을 많이 차지하는 프로세스는 종료되고 이때 방금 스왑 아웃된 페이지 파일은 (필요한 경우를 제외하고) 자동으로 물리 메모리로 스왑되지 않으며, 이때 시스템 물리 메모리는 많이 여유로워지며 스왑은 공간도 사용하고 있는데 방금 언급한 문제 현상이 나타납니다.
마지막으로, 사용 시 스왑 공간의 페이지가 먼저 물리적 메모리로 스왑됩니다. 이때 이러한 페이지를 수용할 수 있는 물리적 메모리가 충분하지 않으면 결과적으로 즉시 스왑 아웃되지 않을 수 있습니다. 이러한 스왑 페이지를 저장하는 데 필요한 공간은 결국 Linux에서 잘못된 충돌 및 서비스 이상과 같은 문제로 이어질 것입니다. Linux는 일정 시간 내에 스스로 복원할 수 있지만 복원된 시스템은 기본적으로 사용할 수 없습니다.
따라서 Linux 메모리 사용을 올바르게 계획하고 설계하는 것이 매우 중요합니다. 물리적 메모리 및 스왑 공간의 크기 설정은 실제 사용되는 하드 디스크 크기에 따라 다르지만 일반적으로 다음 기본 원칙을 따릅니다.
메모리가 더 작은 경우(경험에 따르면 물리적 메모리는 4GB 미만) 일반적으로 스왑 파티션 크기를 메모리의 2배로 설정합니다.
물리적 메모리가 4GB보다 크고 16GB 미만인 경우 다음을 수행할 수 있습니다. 스왑 파티션 크기를 실제 메모리와 동일하게 설정합니다.
메모리 크기가 16GB를 초과하는 경우 스왑을 0으로 설정할 수 있지만 특정 크기의 스왑 파티션을 설정하면 특정 효과가 있으므로 권장되지 않습니다.
GUI를 사용하는 Windows 및 Linux 운영 체제에서는 일반적으로 UI를 사용하여 시스템 메모리 및 공간 사용량을 확인할 수 있지만 개발이나 운영 및 유지 관리 담당자에게는 종종 GUI 없이 Linux 서버에서 작업하려면 명령줄이 GUI보다 더 많은 기능과 유연성을 제공할 수 있습니다.
특히 시스템의 응용 프로그램이 비정상적이거나 시스템 사용량이 비정상적이거나 Linux 개발에 메모리 트리밍이 필요한 경우 시스템 메모리 및 공간 사용량을 이해하고 일반적으로 사용되는 몇 가지 보기 도구를 마스터해야 합니다.
free
명령은 현재 시스템의 사용되지 않은 메모리 크기를 표시할 수 있으며, 커널에서 사용하는 메모리 버퍼도 표시할 수 있습니다. 터미널에 free
를 입력하면(매개변수는 나중에 설명됩니다) 다음과 같이 서버의 메모리 상태를 확인할 수 있습니다.free
命令可以显示当前系统未使用的和已使用的内存大小,还可以显示被内核使用的内存缓冲区。在终端中输入free
(参数稍后说明)可以看到我们服务器内存情况,如下:
Mem: 内存的使用信息
Swap: 交换空间的使用信息
total:总计物理内存的大小。
used:已使用物理内存。
free:可用物理内存。
shared:多个进程共享的内存总额。
buffers/cached:缓存缓冲使用物理内存大小。
available:还可以被应用程序使用的物理内存大小。
total = used + free + buffer/cache
avaiable = free + buffer/cache(一般来说是这样,个人电脑是这样,但服务器或者公共云普通用户有部分buffer/cache是用不了的就会有avaiable
free是正在未被使用的内存
available是应用程序认为可用的内存
Linux为了提升读写性能,消耗一部分内存资源作为缓存或者缓冲内存,在内核看来这部分buffer/cache属于已被使用的内存;在应用程序申请内存,而free内存不够时,就会让内核回收buffer和cache来满足应用程序的内存需求。
buffers和cache是有一定区别的:
free命令下显示的单位是k,可以在free后面加上-m(即free -m
)显示单位为Mb,如下图:
可以通过free --help
查看free的详细命令:
通过free -h可以自动匹配适合人阅读习惯的单位,其中h是humanity之意。
ps:
第3行swap为交换分区,类似windows系统中的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。
top -X
used: 물리적 메모리가 사용되었습니다.
free -m
) 표시 단위는 아래와 같이 Mb입니다.free --help
를 통해 free의 자세한 명령을 볼 수 있습니다:top -X
🎜🎜-b:以批处理模式操作; -c:显示完整的治命令; -d:屏幕刷新间隔时间; -I:忽略失效过程; -s:保密模式; -S:累积模式; -i<时间>:设置间隔时间; -u<用户名>:指定用户名; -p<进程号>:指定进程; -n<次数>:循环显示的次数。
h:显示帮助画面,给出一些简短的命令总结说明; k:终止一个进程; i:忽略闲置和僵死进程,这是一个开关式命令; q:退出程序; r:重新安排一个进程的优先级别; S:切换到累计模式; s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s; f或者F:从当前显示中添加或者删除项目; o或者O:改变显示项目的顺序; l:切换显示平均负载和启动时间信息; m:切换显示内存信息; t:切换显示进程和CPU状态信息; c:切换显示命令名称和完整命令行; M:根据驻留内存大小进行排序; P:根据CPU使用百分比大小进行排序; T:根据时间/累计时间进行排序; w:将当前设置写入~/.toprc文件中。
top - 10:14:31 当前系统时间
up 3 days, 22:36 系统已经运行了3天22h36min
1 users 共有1个用户为登录状态
load average: 0.57, 0.74, 0.65 系统负载,即任务队列的平均长度,load average后面的三个数字分别表示距离现在一分钟,五分钟,十五分钟的负载情况。
注意:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
Tasks: 322 total 总进程数
2 running 正在运行的进程数
320 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 冻结进程数
%Cpu(s): 2.7 us, 用户空间占用CPU百分比(用户态使用CPU占比)
2.7 sy 内核空间占用CPU百分比 (系统态使用CPU占比)
0.0 ni 用做nice加权的进程分配的用户态cpu时间比
94.0 id 空闲的cpu时间比
0.0 wa IO wait ,cpu等待磁盘写入完成时间
0.0 hi Hardware IRQ,硬中断消耗时间
0.0 si Software IRQ,软中断消耗时间
0.7 st 被hypervisor(管理程序,一般为服务器或者虚拟机)偷取时间
MiB Mem : 11995.2 total 物理内存总量,单位:Mb
360.9 free 空闲内存总量
6766.0 used 使用的物理内存总量,此处需要注意的是:used实际指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
4868.3+buff/cache 用作内核缓存的内存量
MiB Swap: 7680.0 total 交换区总量
7433.1 free 空闲交换区总量
246.9 used 使用的交换区总量
3665.4 avail Mem 在不交换的情况下,对启动新应用程序可用内存的估计
(网上也有说法是交换区的可用容量)
top命令第六行为空。
top命令第七行是各个进程的监控:
从左到右依次为:
PID — 进程id USER — 进程所有者 PR — 进程优先级 NI — nice值。负值表示高优先级,正值表示低优先级 VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA SHR — 共享内存大小,单位kb S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU — 上次更新到现在的CPU时间占用百分比 %MEM — 进程使用的物理内存百分比 TIME+ — 进程使用的CPU时间总计,单位1/100秒 COMMAND — 进程名称(命令名/命令行)
需要注意的是,此界面显示的并不是所有进程,由于页面显示限制仅仅显示了这几行,我们可以通过top -b -n 1
查看系统的所有进程的快照。
命令:cat /proc/meminfo
注:initrd和初始化代码init在引导完成之后会被释放掉,所以最终的内核可管理内存(total)会比dmesg显示的available更多一点,相应的源代码可参见: free_initrd_mem() 和 free_initmem()。
优化可以主要从优化保留内存和优化used内存两个方面进行,具体的需要结合代码。
查看磁盘命令比较多,最常用的为: df -lh
命令
命令:lsmod
相关推荐:《Linux视频教程》
위 내용은 리눅스 물리적 메모리는 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!