runtime 环境变量使用手册
本节介绍 runtime
(运行时)所提供的环境变量。
在 Linux shell 与 macOS shell 中,您可以使用以下方式设置仓颉运行时提供的环境变量:
$ export VARIABLE=value
在 Windows cmd 中,您可以使用以下方式设置仓颉运行时提供的环境变量:
> set VARAIBLE=value
本节后续的示例都为 Linux shell 中的设置方式,若与您的运行平台不符,请根据您的运行平台选择合适的环境变量设置方式。
runtime 初始化可选配置
注意:
- 所有整型参数为 Int64 类型,浮点型参数为 Float64 类型;
- 所有参数如果未显式规定最大值,默认隐式最大值为该类型最大值;
- 所有参数若超出范围则设置无效,自动使用默认值。
cjHeapSize
指定仓颉堆的最大值,支持单位为 kb(KB)、mb(MB)、gb(GB),支持设置范围为[4MB, 系统物理内存],超出范围的设置无效,仍旧使用默认值。若物理内存低于 1GB,默认值为 64 MB,否则为 256 MB。
例如:
export cjHeapSize=32GB
cjRegionSize
指定 region 分配器 thread local buffer 的大小,支持单位为 kb(KB)、mb(MB)、gb(GB),支持设置范围为[4kb, 2048kb],超出范围的设置无效,仍旧使用默认值。默认值为 64 KB。
例如:
export cjRegionSize=1024kb
cjExemptionThreshold
指定存活 region 的水线值,取值 (0,1],该值与 region 的大小相乘,若 region 中存活对象数量大于相乘后的值,则该 region 不会被回收(其中死亡对象继续占用内存)。该值指定得越大,region 被回收的概率越大,堆中的碎片空间就越少,但频繁回收 region 也会影响性能。超出范围的设置无效,仍旧使用默认值。默认值为 1024 KB。默认值为 0.8,即 80%。
例如:
export cjExemptionThreshold=0.8
cjHeapUtilization
指定仓颉堆的利用率,该参数用于 GC 后更新堆水线的参考依据之一,取值 (0, 1],堆水线是指当堆中对象总大小达到水线值时则进行 GC。该参数指定越小,则更新后的堆水线会越高,则触发 GC 的概率会相对变低。超出范围的设置无效,仍旧使用默认值。默认值为 0.8,即 80%。
例如:
export cjHeapUtilization=0.8
cjHeapGrowth
指定仓颉堆的增长率,该参数用于 GC 后更新堆水线的参考依据之一,取值必须大于 0。增长率的计算方式为 1 + cjHeapGrowth。该参数指定越大,则更新后的堆水线会越高,则触发 GC 的概率会相对变低。默认值为 0.15,表示增长率为 1.15。
例如:
export cjHeapGrowth=0.15
cjAlloctionRate
指定仓颉运行时分配对象的速率,该值必须大于 0,单位为 MB/s,表示每秒可分配对象的数量。默认值为 10240,表示每秒可分配 10240 MB 对象。
例如:
export cjAlloctionRate=10240
cjAlloctionWaitTime
指定仓颉运行时分配对象时的等待时间,该值必须大于 0,支持单位为 s、ms、us、ns,推荐单位为纳秒(ns)。若本次分配对象距离上一次分配对象的时间间隔小于此值,则将等待。默认值为 1000 ns。
例如:
export cjAlloctionWaitTime=1000ns
cjGCThreshold
指定仓颉堆的参考水线值,支持单位为 kb(KB)、mb(MB)、gb(GB), 取值必须为大于 0 的整数。当仓颉堆大小超过该值时,触发 GC。默认值为堆大小。
例如:
export cjGCThreshold=20480KB
cjGarbageThreshold
当 GC 发生时,如果 region 中死亡对象所占比率大于此环境变量,此 region 会被放入回收候选集中,后续可被回收(如果受到其它策略影响也可能不被回收),默认值为 0.5,无量纲,支持设置的区间为[0.0, 1.0]。
例如:
export cjGarbageThreshold=0.5
cjGCInterval
指定 2 次 GC 的间隔时间值,取值必须大于 0,支持单位为 s、ms、us、ns,推荐单位为毫秒(ms)。若本次 GC 距离上次 GC 的间隔小于此值,则本次 GC 将被忽略。该参数可以控制 GC 的频率。默认值为 150 ms。
例如:
export cjGCInterval=150ms
cjBackupGCInterval
指定 backup GC 的间隔值,取值必须大于 0,支持单位为 s、ms、us、ns,推荐单位为秒(s),当仓颉运行时在该参数设定时间内未触发 GC,则触发一次 backup GC。默认值为 240 秒,即 4 分钟。
例如:
export cjBackupGCInterval=240s
cjGCThreads
指定影响 GC 线程数的因数,取值必须大于 0。GC 线程数的计算方式为:(系统支持的并发线程数 / cjGCThreads) - 1。默认值为 8。
例如:
export cjGCThreads=8
cjProcessorNum
指定仓颉线程的最大并发数,支持设置范围为 (0, CPU 核数 * 2],超出范围的设置无效,仍旧使用默认值。调用系统 API 获取 cpu 核数,若成功默认值为 cpu 核数,否则默认值为 8。
例如:
export cjProcessorNum=2
cjStackSize
指定仓颉线程的栈大小,支持单位为 kb(KB)、mb(MB)、gb(GB),支持设置范围为 Linux 平台下[64KB, 1GB],Windows 平台下[128KB, 1GB],超出范围的设置无效,仍旧使用默认值。Linux 平台下默认值为 64KB,Windows 平台下为 128KB。
例如:
export cjStackSize=100kb
运维日志可选配置
MRT_LOG_FILE_SIZE
指定 runtime 运维日志的文件大小,默认值为 10 MB,支持单位为 kb(KB)、mb(MB)、gb(GB),设置值需大于 0。
日志大小超过该值时,会重新回到日志开头进行打印。
最终生成日志大小略大于 MRT_LOG_FILE_SIZE。
例如:
export MRT_LOG_FILE_SIZE=100kb
MRT_LOG_PATH
指定 runtime 运维日志的输出路径,若该环境变量未设置或路径设置失败,则运维日志默认打印到 stdout(标准输出)或 stderr(标准错误)中。
例如:
export MRT_LOG_PATH=/home/cangjie/runtime/runtime_log.txt
MRT_LOG_LEVEL
指定 runtime 运维日志的最小输出级别,大于等于这个级别的日志会被打印,默认值为 e,支持设置值为[v|d|i|w|e|f|s]。v(VERBOSE)、d(DEBUGY)、i(INFO)、w(WARNING)、e(ERROR)、f(FATAL)、s(FATAL_WITHOUT_ABORT)。
例如:
export MRT_LOG_LEVEL=v
MRT_REPORT
指定 runtime GC 日志的输出路径,若该环境变量未设置或路径设置失败,该日志默认不打印。
例如:
export MRT_REPORT=/home/cangjie/runtime/gc_log.txt
MRT_LOG_CJTHREAD
指定 cjthread 日志的输出路径,若该环境变量未设置或路径设置失败,该日志默认不打印。
例如:
export MRT_LOG_CJTHREAD=/home/cangjie/runtime/cjthread_log.txt
cjHeapDumpOnOOM
指定是否要在发生堆溢出后输出堆快照文件,默认不开启,支持设置值为[on|off],设定为 on 时开启功能,设定 off 或者其他值不开启功能。
例如:
export cjHeapDumpOnOOM=on
cjHeapDumpLog
指定输出堆快照文件的路径,注意指定的路径必须存在,且应用执行者对其具有读写权限。如果不指定,堆快照文件将输出到当前执行目录。
例如:
export cjHeapDumpLog=/home/cangjie
运行环境可选配置
MRT_STACK_CHECK
开启 native stack overflow 检查,默认不开启,支持设置值为 1、true、TRUE 开启功能。
例如:
export MRT_STACK_CHECK=true
CJ_SOF_SIZE
当 StackOverflowError 发生时,将自动进行异常栈折叠方便用户阅读,折叠后栈帧层数默认值是 32。可以通过配置此环境变量控制折叠栈长度,支持设置为 int 范围内的整数。 CJ_SOF_SIZE = 0,打印所有调用栈; CJ_SOF_SIZE < 0,从栈底开始打印环境变量配置层数; CJ_SOF_SIZE > 0,从栈顶开始打印环境变量配置层数; CJ_SOF_SIZE 未配置,默认打印栈顶开始 32 层调用栈;
例如:
export CJ_SOF_SIZE=30