设置堆初始值
指令1:-Xms2g
指令2:-XX:InitialHeapSize=2048m
设置堆区最大值
指令1:`-Xmx2g`
指令2: -XX:MaxHeapSize=2048m
缩小堆内存的时机
-XX:MaxHeapFreeRatio=70//堆内存使用率大于70时扩张堆内存,xms=xmx时该参数无效,默认值70
扩张堆内存的时机
-XX:MinHeapFreeRatio=40//堆内存使用率小于40时缩减堆内存,xms=xmx时该参数无效,默认值40
新生代内存配置
指令1:-Xmn512m
指令2:-XX:MaxNewSize=512m
2个survivor区和Eden区大小比率
指令:-XX:SurvivorRatio=6 //S区和Eden区占新生代比率为1:6,两个S区2:6
新生代和老年代的占比
-XX:NewRatio=4 //表示新生代:老年代 = 1:4 即老年代占整个堆的4/5;默认值=2
二、方法区内存配置常用参数
初始化的Metaspace大小,
-XX:MetaspaceSize :
Metaspace最大值
-XX:MaxMetaspaceSize
三、线程栈内存配置常用参数
每个线程栈最大值
指令1:-Xss256k
指令2:-XX:ThreadStackSize=256k
注意:
栈设置太大,会导致线程创建减少。
栈设置小,会导致深入不够,深度的递归会导致栈溢出。
建议栈深度设置在3000-5000
四、配置垃圾收集器
Serial垃圾收集器(新生代)
开启:-XX:+UseSerialGC
关闭:-XX:-UseSerialGC
//新生代使用Serial 老年代则使用SerialOld
ParNew垃圾收集器(新生代)
开启 -XX:+UseParNewGC
关闭 -XX:-UseParNewGC
//新生代使用功能ParNew 老年代则使用功能CMS
Parallel Scavenge收集器(新生代)
开启 -XX:+UseParallelOldGC
关闭 -XX:-UseParallelOldGC
//新生代使用功能Parallel Scavenge 老年代将会使用Parallel Old收集器
ParallelOl垃圾收集器(老年代)
开启 -XX:+UseParallelGC
关闭 -XX:-UseParallelGC
//新生代使用功能Parallel Scavenge 老年代将会使用Parallel Old收集器
CMS垃圾收集器(老年代)
开启 -XX:+UseConcMarkSweepGC
关闭 -XX:-UseConcMarkSweepGC
G1垃圾收集器
开启 -XX:+UseG1GC
关闭 -XX:-UseG1GC
五、GC策略配置
GC并行执行线程数
-XX:ParallelGCThreads=16
新生代可容纳的最大对象
-XX:PretenureSizeThreshold=1000000 //大于此值的对象直接会分配到老年代,设置为0则没有限制。 //避免在Eden区和Survivor区发生大量的内存复制,该参数只对Serial和ParNew收集器有效,Parallel Scavenge并不认识该参数
进入老年代的GC年龄
进入老年代最小的GC年龄
-XX:InitialTenuringThreshol=7 //年轻代对象转换为老年代对象最小年龄值,默认值7,对象在坚持过一次Minor GC之后,年龄就加1,每个对象在坚持过一次Minor GC之后,年龄就增加1
进入老年代最大的GC年龄
-XX:MaxTenuringThreshold=15 //年轻代对象转换为老年代对象最大年龄值,默认值15
六、GC日志信息配置
配置GC文件路径
-Xloggc:/data/gclog/gc.log//固定路径名称生成 -Xloggc:/home/GCEASY/gc-%t.log //根据时间生成
滚动生成日志
日志文件达到一定大小后,生成另一个文件。须配置Xloggc
开启 -XX:+UseGCLogFileRotation
关闭 -XX:-UseGCLogFileRotation
-XX:NumberOfGCLogFiles=4 //滚动GC日志文件数,默认0,不滚动 -XX:GCLogFileSize=100k //GC文件滚动大小,需配置UseGCLogFileRotation,设置为0表示仅通过jcmd命令触发
在 Linux 中设置共享内存的方法有很多种,下面是一种常用的方法:
使用shmget()函数创建一块共享内存,可以指定共享内存的大小和标识符。
使用shmat()函数将共享内存连接到进程的地址空间,返回指向共享内存的指针。
使用shmdt()函数断开与共享内存的连接。
使用shmctl()函数删除共享内存。
具体实现可以参考以下代码示例:
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
int main() {
// 1. 创建共享内存
int shmid = shmget(IPC_PRIVATE, 100, 0666 | IPC_CREAT)
if (shmid <0) {
perror("shmget error")
return 1
}
// 2. 连接共享内存
void *shm = shmat(shmid, NULL, 0)
if (shm == (void *)-1) {
perror("shmat error")
return 1
}
// 使用共享内存
// ...
// 3. 断开连接
if (shmdt(shm) <0) {
perror("shmdt error")
return 1
}
// 4. 删除共享内存
if (shmctl(shmid, IPC_RMID, 0) <0) {
perror("shmctl error")
return 1
}
return 0
}
这是一个简单的示例,在这里我们创建了一个大小为100字节的共享内存,并使用shmget()、shmat()、shmdt()、shmctl()四个函数来创建、连接、断开连接、删除共享内存。
在实际应用中,我们需要根据需要来调整共享内存的大小,并在使用共享内存时进行相应的同步和互斥 *** 作来保证数据的安全性。
需要注意的是,在使用共享内存时,我们需要确保共享内存在进程全部退出后能够被释放,这可以通过在父进
程中删除共享内存来实现。另外在程序中也要考虑到异常处理,如果在程序运行过程中发生了异常,应该及时释放所占用的共享内存,以免造成资源浪费。
另外需要提醒的是,共享内存是一种高级的IPC(Inter-Process Communication)机制,使用时需要谨慎,避免出现数据竞争和死锁等问题。
swap是一块磁盘空间或者一个本地文件/proc/sys/vm/swappiness 可以设置服务器使用 swap 的积极程度。取值范围为0-100,值越大,越积极使用swap,更倾向于回收匿名页值越小,越消极使用swap,更倾向于回收文件页。 即使swap设置为0,当剩余内存+文件页小于页高阈值( pages_high )的时候,也会发生swap Linux有专门的内核线程 kswapd0 定期回收内存,为了衡量内存的使用情况, kswapd0 定义了三个内存阈值:页最小阈值 pages_min 、页低阈值 pages_low 和页高阈值 pages_high ,剩余内存使用 pages_free 表示。kswapd0 定期扫描内存的使用情况,并根据剩余内存和这三个阈值的关系进行内存回收 *** 作。pages_free <pages_min :进程可用内存耗尽,只有内核才可以分配内存pages_min <pages_free <pages_low :内存压力较大, kswapd0 会执行内存回收,直到剩余内存大于高阈值为止pages_low <pages_free <pages_high :内存有一定压力,但还可以满足新内存请求pages_free >pages_high :剩余内存较多,没有内存压力。 这些阈值可以通过内核选项来 proc/sys/vm/min_free_kbytes 间接设置。 min_free_kbytes 设置了页最小阈值( pages_min )。 pages_low=pages_min*5/4 , pages_high=pages_min*3/2 /etc/security/limits.conf通过这个配置文件可以对每个登录的会话进行限制,这种限制不是全局的,也不是永久的,只在会话期间起作用。 通常,对单个用户的限制优先级高于对用户组的限制 可以使用以下方式限制内存使用 语法<domain><type><item><value> 详见 limits.conf(5) - Linux man page /proc/sys/vm/overcommit_memory 控制内核使用虚拟内存的模式,可以设置为以下值欢迎分享,转载请注明来源:内存溢出
评论列表(0条)