20220528#每日一问#system_memory默认值30G,当系统内存没这么大时是怎么分配的?

今天学习内存架构产生一个疑问,看手册上说 system_memory 这个参数默认值为 30G,这部分内存是预留给租户共享资源和功能的。如果在服务器上内存本身只有 30G,那 OB 是如何控制资源占用的?是否还有另外一个百分比的参数参与自动调整?

如果是这种情况,OB启动会失败!

阿福老师没有说清楚这个30G内存是计算机的内存,还是OB将要占用的内存。也没有说是商业版 还是开源版?

如果OB启动至少要占用30G内存,30G内存的计算机启动后,OB是无法启动的!OB 也没有办法资源占用的。

结论就是调整默认值大小。并且是调小


服务器上内存本身只有 30G,那么操作系统会占用一部分,在不调整

system_memory

 参数来启动,就会启动失败。

系统内部可使用的内存上限可通过 ystem_memory



 参数来配置,该参数是对系统内部使用内存的预估,实际上限制的是租户可使用的内存上限,即 

memory_limit - system_memory。例如,假设 OceanBase 数据库内存上限为 80 GB,system_memory 的值为 20 GB,那么可用于租户分配的内存就是剩下的 60 GB。


system_memory

 用于设置系统预留的内存容量。默认值30G

取值范围[0M, +∞)


不会失败

不会失败的,失败我也不会问这个问题呀,看我的配置文件,我的虚拟机每个机器只有12GB内存

oceanbase-ce:
  servers:
    - name: server1
      ip: 10.211.55.74
    - name: server2
      ip: 10.211.55.75
    - name: server3
      ip: 10.211.55.76
  global:
    home_path: /home/chris/observer
    data_dir: /data
    redo_dir: /data/redo
    devname: eth0
    mysql_port: 2881
    rpc_port: 2882
    zone: zone1
    datafile_size: 30G
    appname: obcluster
    root_password: observer
    proxyro_password: obproxy
  server1:
    zone: zone1
  server2:
    zone: zone2
  server3:
    zone: zone3
obproxy-ce:
  depends:
    - oceanbase-ce
  servers:
    - 10.211.55.73
  global:
    home_path: /home/chris/obproxy
    skip_proxy_sys_private_check: true
    enable_strict_kernel_release: false
    listen_port: 2883
    prometheus_listen_port: 2884
    cluster_name: obcluster
    obproxy_sys_password: obproxy-sys
    observer_sys_password: obproxy

部署采用的是autodeploy的方式

obd yaml文件里如果没有指定,autodeploy的时候会自动计算(调整)比如memory_limit/system_memory。

2 个赞

感谢老师,解决了我的疑惑

autodeploy会根据机器可用资源自动计算关键配置项如memory_limit,system_memory等;