遇到问题
在服务器上运行 nexus 出现Native memory allocation (mmap) failed to map 838860800 bytes for committing reserved memory
问题。
原因:查资料后是因为运行 nexus 需要 800m 的内存,而机器配置是1G,剩余可用的只有几十兆,所以导致无法启动
解决办法
方法一: 扩大机器配置;
方法二: 设置交换内存swap(一般设置为内存的两倍大小);
dd if=/dev/zero of=/tmp/swapfile bs=1024k count=256 #格式化文件 mkswap /tmp/swapfile #加载交换文件 swapon /tmp/swap #永久生效 vim /etc/fstab #最后一行添加 /swap1 swap swap defaults 0 0
方法三:设置虚拟机的启动参数
# Xms: 初始化堆内存(heap) # Xmx: 最大堆内存 # PermSize: 初始化永久内存,存储class类,不会被GC # MaxPermSize: 最大永久内存 # Xss: 每增加一个线程(thread)就会立即消耗的内存,而最佳值应该是128K,默认值好像是512 JAVA\_OPTS=-Xss128k -Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=1024m
在这里补充下堆和栈的区别(这个堆和栈不是数据结构的堆和栈)
原文地址:https://blog.csdn.net/byg184244735/article/details/79832217栈中分配局部变量空间,堆区是向上增长的用于分配程序员申请的内存空间。另外还有静态区是分配静态变量,全局变量空间的;只读区是分配常量和程序代码空间的;以及其他一些分区。
来看一个网上很流行的经典例子:
main.cpp
int a = 0; 全局初始化区
char \*p1; 全局未初始化区
main()
{
int b; 栈
char s\[\] = “abc”; 栈
char \*p2; 栈
char \*p3 = “123456”; 123456\\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char \*)malloc(10); 堆
p2 = (char \*)malloc(20); 堆
}
关于堆和栈区别的比喻
堆和栈的区别可以引用一位前辈的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。