服务器测评网
我们一直在努力

linux内存实验

Linux内存管理基础实验

Linux内存管理是操作系统核心功能之一,直接影响系统性能与稳定性,通过实验深入理解内存分配、回收及监控机制,有助于优化系统资源使用,本实验从基础概念出发,结合实际操作,逐步探索Linux内存管理的奥秘。

linux内存实验

实验环境准备

实验环境采用Ubuntu 20.04 LTS系统,内核版本为5.4.0-65-generic,通过虚拟机搭建实验平台,确保系统纯净无干扰,首先安装必要工具:sudo apt update && sudo apt install sysstat free htop valgrindsysstat提供sar命令用于历史数据统计,valgrind用于内存泄漏检测,实验前需关闭swap分区(sudo swapoff -a),以简化内存分配逻辑。

内存分配与释放观察

使用mallocfree函数动态分配内存,并通过/proc/meminfo实时监控变化,编写C程序示例:

#include <stdlib.h>  
#include <stdio.h>  
int main() {  
    int *ptr = malloc(100 * 1024 * 1024); // 分配100MB内存  
    if (ptr == NULL) {  
        perror("malloc failed");  
        return 1;  
    }  
    printf("Memory allocated. Press Enter to free...");  
    getchar();  
    free(ptr);  
    printf("Memory freed.\n");  
    return 0;  
}  

编译运行后,通过watch -n 1 cat /proc/meminfo观察MemAvailable字段的变化,分配后可用内存减少100MB,释放后恢复,验证了动态内存管理的即时性。

内存泄漏检测

利用valgrind工具检测内存泄漏,修改上述程序,故意不释放内存:

linux内存实验

// 省略头文件  
int main() {  
    malloc(50 * 1024 * 1024); // 故意不释放  
    printf("Memory allocated without free. Press Enter to exit...");  
    getchar();  
    return 0;  
}  

运行valgrind --leak-check=full ./a.out,输出显示definitely lost: 50MB,明确指出泄漏位置,实验表明,未匹配的malloc会导致内存不可回收,长期运行可能引发系统性能下降。

内存映射文件探索

通过mmap系统调用实现文件与内存的映射,实验代码片段:

#include <sys/mman.h>  
#include <fcntl.h>  
int main() {  
    int fd = open("test.txt", O_RDWR);  
    ftruncate(fd, 4096); // 文件大小设为4KB  
    char *data = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);  
    data[0] = 'A'; // 修改文件内容  
    munmap(data, 4096);  
    close(fd);  
    return 0;  
}  

使用strace跟踪系统调用,发现mmap返回的地址直接用于文件读写,避免了数据拷贝,提升了大文件处理效率。

OOM Killer机制验证

Linux在内存耗尽时会触发OOM Killer(Out of Memory Killer),通过以下步骤模拟:

linux内存实验

  1. 创建脚本消耗内存:while :; do :; done | cat > /dev/null &
  2. 多次执行上述脚本,直至系统内存接近耗尽。
  3. 观察dmesg | grep -i "killed process",显示被终止的进程及其内存占用情况,实验证实,OOM Killer会优先选择占用内存大且不重要的进程,确保系统核心服务运行。

内存优化实践

通过调整/etc/sysctl.conf参数优化内存使用:

  • vm.swappiness=10:减少swap使用频率,优先使用物理内存。
  • vm.vfs_cache_pressure=50:平衡inode和dentry缓存回收速度。
    执行sysctl -p使配置生效,结合free -m对比优化前后内存分配效率。

本次实验通过动态分配、泄漏检测、文件映射等场景,全面覆盖Linux内存管理的关键技术,结果表明,合理使用内存工具和参数调优,能有效提升系统稳定性,未来可进一步研究cgroups内存限制或NUMA架构下的内存分配策略,深化对操作系统底层机制的理解。

赞(0)
未经允许不得转载:好主机测评网 » linux内存实验