在lukechilds/dockerpi容器编译C++文件时虚拟内存耗尽求助
解决dockerpi容器编译大C++文件内存耗尽问题
首先得明确:虽然你给Docker引擎分配了8GB内存,但lukechilds/dockerpi是模拟树莓派的容器,默认内存配额可能远低于这个值,这才是编译时内存不够的核心原因。试试下面这些办法:
先确认容器实际可用内存
运行docker inspect <你的容器ID或名称> | grep Memory,查看MemoryLimit字段的值,大概率是默认的512MB或1GB,根本支撑不了10MB C++文件的编译需求。启动容器时强制分配大内存
重新启动容器时,加上内存限制参数,比如分配6GB内存并取消交换内存限制:docker run -m 6g --memory-swap -1 lukechilds/dockerpi-m 6g指定容器可用内存为6GB,--memory-swap -1表示允许容器使用任意大小的交换内存,避免虚拟内存耗尽。给容器加swap文件(如果仍内存不足)
进入容器后执行以下命令创建4GB的swap文件:dd if=/dev/zero of=/swapfile bs=1M count=4096 chmod 600 /swapfile mkswap /swapfile swapon /swapfile系统会把swap当作虚拟内存使用,缓解内存压力。
优化编译参数降低内存占用
编译时用-O0关闭优化(优化阶段会大幅增加内存消耗),先保证能编译通过:g++ -O0 lenet5-forward-train.cpp如果文件包含大量模板代码,再加
-fno-inline减少内联,进一步降低内存使用;要是能把大文件拆成多个小编译单元分开编译再链接,每个小文件编译时的内存需求会小很多。
内容的提问来源于stack exchange,提问作者Purnendu Prabhat
相关产品推荐
相关产品推荐

