云端Ubuntu:Virtual memory exhausted:Cannot allocate memory

在云端Ubuntu服务器上遇到'Virtual memory exhausted: Cannot allocate memory'错误。通过检查内存使用情况发现并非实际内存不足,而是缺少虚拟内存(swap)。解决方案包括创建并启用swap文件,具体步骤包括:查看内存使用情况、确定硬盘块大小、创建swap文件、将其转换为swap分区、启用swap以及设置开机自动加载。

在云端ubuntu下编译程序出现了command :"Virtual memory exhausted:Cannot allocate memory",我用df-h查看设备内存的时候还显示有很多啊~在网上查了一下说是虚拟内存不够,这在本地当然不会发生,因为本地有好多好多内存呢,但是亚马逊的云服务器未给你分配虚拟内存,所以可以通过自行增加虚拟内存的方法予以解决。将步骤总结了如下:

(1)用free或command free 查看系统内存使用情况(Linux下一般用command free)

图片2.png

从应用程序的角度来说,可用内存=系统free( memory+buffers+cached.),如上图:971732=956856+2132+12744
swap:表示硬盘上交换分区的使用情况,此处为0

(2)确定硬盘的最佳块大小,为下面的块拷贝做准备,通过测试发现,块大小为1024个字节时拷贝速度最快

#dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

#dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

#dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

#dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

从你提供的错误信息来看,Dante Server 安装过程中出现了两个主要问题: 1. **编译警告**: - `Rcompat.c` 文件中的 `Rwritev` 和 `Rsend` 函数存在 `const` 限定符被丢弃的警告。这通常是因为将 `const` 修饰的指针赋值给了非 `const` 指针。 - 示例警告: ``` Rcompat.c:94:19: warning: assignment discards 'const' qualifier from pointer target type [enabled by default] msg.msg_iov = iov; ^ ``` 2. **内存分配失败**: - 编译过程中出现了 `virtual memory exhausted: Cannot allocate memory` 错误,表明系统内存不足,导致编译失败。 - 多个编译任务(如 `issetugid.lo`、`Rgethostbyname.lo` 等)因内存不足而失败。 3. **安装失败**: - 最终安装失败,提示 `Dante Server Install Failed!`。 ### 解决方法: 1. **修复 `const` 警告**: - 修改 `Rcompat.c` 文件,确保 `const` 指针的正确使用。例如: ```c const struct iovec *iov_const = iov; msg.msg_iov = (struct iovec *)iov_const; // 显式类型转换(不推荐,但可抑制警告) ``` - 更好的方式是重新设计代码,避免丢弃 `const` 限定符。 2. **解决内存不足问题**: - 增加系统的交换空间(swap): ```bash sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile ``` - 或者减少并行编译任务(如 `make -j1`)。 3. **检查系统资源**: - 确保系统有足够的内存和磁盘空间: ```bash free -h df -h ``` 4. **重新编译和安装**: - 清理之前的编译结果并重新编译: ```bash make clean make sudo make install ``` ### 其他问题: - `ls: cannot access /sbin/init/*systemd*: Not a directory` 表明脚本尝试访问不存在的路径,可能是配置错误或路径拼写问题。 ### 总结: 主要问题是内存不足导致编译失败,以及代码中的 `const` 警告。建议优先解决内存问题,然后修复代码中的 `const` 使用问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值