Linux虚拟运行环境:WSL、VMware对比及维护

Linux 虚拟内存和物理内存的理解

哎呀,咱们就来说说这个虚拟内存和物理内存吧。
让我告诉你我当时遇到的陷阱。

当时我刚刚接手公司服务器,内存总是满了,卡住了。
经过再三检查,我发现这是一个老程序,似乎使用了无限内存。
一开始以为是程序写得不好,后来发现是因为不懂虚拟内存和物理内存。

我明白你所说的免费地址空间。
每个进程都有自己的 4 GB 可用空间,听起来相当宽敞,对吧?但实际上,这4 GB是虚拟的。
例如,当我在3 2 位系统上调试程序时,我发现尽管地址空间是4 GB,但实际使用的只是其中的一小部分。
关键是如何根据页表将这个虚拟地址转换为物理地址。
如果页表使用不正确,内存访问就会混乱,程序就会崩溃。
记得有一次,页表设置错误,结果在程序运行的过程中,突然访问了一个不存在的物理地址,导致蓝屏。

按需映射机制也给了我一个窍门。
我有一个程序,启动时占用很少的内存,但在运行过程中动态加载大量数据。
起初我以为它会一次加载所有数据,但事实证明它是一点一点加载的。
这称为延迟分配。
如果我不熟悉内存管理,我可能会错误地认为内存总是满的,而实际上它只是指向磁盘的虚拟地址。
如果不明白这一点,你的优化就会误入歧途。

我也使用过代码共享。
我们有多个使用同一个库的服务。
如果我们不使用共享内存机制,每个服务都复制一份库,会浪费多少内存?然后,我们使用ELF共享库,多个进程共享相同的物理内存,节省了大量的内存。
如果不理解这一点,内存使用量可能会增加一倍。

片段使用这种机制非常有趣。
我有一个程序需要频繁分配和释放内存。
如果不使用碎片,内存将变得碎片化,导致大块内存不可用。
然后,我们使用slab缓存来缓存常用的小内存对象,这样分配和释放内存会更快。
如果不理解这一点,程序的性能可能会急剧下降。

对于物理内存管理,我也踩过陷阱。
当时我们的服务器内存不足,想要升级,却发现升级后物理内存管理变得更加复杂。
例如,必须了解伙伴算法、slab 缓存和 vmalloc 机制。
如果不明白的话,可能是内存分配有问题,导致系统不稳定。
我记得有一次,我们升级了内存,但没有正确配置伙伴算法。
结果,内存分配总是失败,系统挂起。

一般来说,虚拟内存和物理内存是相辅相成的。
虚拟内存提供灵活的内存使用,而物理内存提供实际的存储空间。
两者共同作用,使系统高效运行。
如果不理解两者之间的关系,很容易出现内存管理问题。

linux系统添加swap虚拟内存与删除配置

Swap分区,当系统内存不足时,自动释放内存用于swap以提高性能。
CentOS6 .0未搭建,监控堪忧,创建方法:root用户SSH登录,dd创建swap文件,mkswap激活,swation生效,随意检查确认。
编辑 /etc/fstab 使其永久化。
删除交换分区:首先停止swapoff,使用rm删除该文件,然后使用sed编辑fstab以删除该条目。