今天遇到一个问题服务器上运行的Java项目突然不能访问,没有注意,直接去再次启动发现
rootelocalhost binl#./startserver.shOpeniDK 64–Bit Server V warning: INFo: os::commit memory(0x0000000082000000, 131830528,0)failed;error='Cannot allocate memory'(errno=12)rootalocalhost binl#
errno=12 无法分配内存内存的错误出现了
通过命令
free –h 查看系统的内存
出现
total used free shared buff/cache available
Mem: 126Gi 112Gi 7.7Gi 3.6Gi 5.9Gi 1.0Gi
Swap: 4.0Gi 0.0Gi 4.0Gi
Mem:
total: 总内存大小,表示系统的物理内存总量,这里是 126Gi(126 GB)。
used: 已使用的内存,表示当前已被程序和系统占用的内存部分,这里是 112Gi。
free: 空闲内存,表示当前未被占用且可用的内存部分,这里是 7.7Gi。
shared: 被多个进程共享的内存,通常是系统缓存或共享内存,这里是 3.6Gi。
buff/cache: 缓存和缓冲区占用的内存,表示用于文件缓存和其他缓存的数据,这里是 5.9Gi。
available: 可用内存,表示当前可供程序使用的内存。这个值通常会比 free 值大,因为它考虑了缓存可以被回收的情况,这里是 1.0Gi。
Swap:
total: 交换空间总大小,表示用于虚拟内存的空间大小,这里是 4.0Gi。
used: 已使用的交换空间,表示当前已经交换到磁盘的内存部分,这里是 0.0Gi。
free: 剩余的交换空间,这里是 4.0Gi。
在网上找了很多的方法,最终决定增加Swap的内存来暂时解决一下
这算是一个临时的解决方案,长期依赖交换空间,可影响系统性能,最好还是从优化内存使用,或者增加物理内存来解决这个问题。具体命令如下:
1 创建1GB的交换文件 (也可以适当调整)
sudo fallocate –l 1G /swapfile1 # 创建1GB大小的交换文件
sudo dd if=/dev/zero of=/swapfile1 bs=1M count=1024 如果你的磁盘空间不足,使用 dd 命令也可以创建交换文件:
2 设置交换文件的权限
sudo chmod 600 /swapfile1
3 格式化交换文件
sudo mkswap /swapfile1
4 启用新的交换空间
sudo swapon /swapfile1
5 查看 交换空间是否启用 命令
free –h
total used free shared buff/cache available
Mem: 126Gi 112Gi 7.7Gi 3.6Gi 5.9Gi 1.0Gi
Swap: 5.0Gi 0.0Gi 5.0Gi
6 使交换文件在系统重启后仍然有效
sudo sh –c 'echo "/swapfile1 none swap sw 0 0" >> /etc/fstab'
评论前必须登录!
注册