数据库使用过程中,有时会出现这样的情况,在OS文件系统有问题的情况下,配置了CPU限额,还是出现了单个用户的作业将资源占满的情况,具体根因是由于OS文件系统有问题的时候,会导致后台cgroup的挂载出现不稳定,从而会导致GaussDB检测挂载时,正好碰到OS异常的情况时,会对cgroup进行重新挂载,这时候会出现已经挂载好,收到CPU资源限制的语句,变成不限制的状态。
这种OS相关的问题,可能线下线上都会出现。
【问题确认】
- 可以使用gs_cgroup -p 查看配置情况,下图中Workload Group information中,可以看到每个租户分配了多少CPU:
- 可以后台使用top 1命令,查看使用率高的CPU列表,下图为正常情况,限额配置了0-15,就只能使用0-15个CPU,其余CPU保持空闲:
如下为OS异常的情况,也是一样的作业,一样的用户,可以看到CPU使用已经不受限制,所有CPU使用率都比较高:
这时候可以查看部分dn的日志,是否有如下字样:
还可以查看如下mpp-cgroupMonitor日志,路径:/var/log/Bigdata/mpp/healthCheck,执行命令:grep ‘gs_cgroup -c’ greoupCheck.log | wc -l
如果有如下字样,基本可以确定是OS文件系统问题,可采用下述方法规避:
【规避方法】
- 修改各个节点的mpp-cgroupMonitor.sh脚本的以下内容:
1) 脚本路径如下:
/opt/huawei/Bigdata/FusionInsight_MPPDB_8.0.0/install/FusionInsight-MPPDB-8.0.0/sbin/mpp-cgroupMonitor.sh
2) 修改前脚本如下:
修改其中第158行到171行内容为如下内容:
| if [ ! -d “${cgroup_cpu_dir}” ]; then
LOG “${LINENO}” “WARN” “cgroup_cpu_dir is $cgroup_cpu_dir, does not exist.” fi if [ ! -d “${cgroup_cpuset_dir}” ]; then LOG “${LINENO}” “WARN” “cgroup_cpuset_dir is $cgroup_cpuset_dir, does not exist.” fi if [ ! -d “${cgroup_blkio_dir}” ]; then LOG “${LINENO}” “WARN” “cgroup_blkio_dir is $cgroup_blkio_dir, does not exist.” fi if [ ! -d “${cgroup_cpuacct_dir}” ]; then LOG “${LINENO}” “WARN” “cgroup_cpuacct_dir is $cgroup_cpuacct_dir, does not exist.” fi |
3)对于每个节点,使用root用户执行以下命令:
gs_cgroup -d -U omm && gs_cgroup -c -U omm -H $GAUSSHOME –upgrade
4)在任意节点,使用omm用户执行以下命令:
gs_ssh –c “gs_cgroup –P” > cgroup.log
5)查看上一步生成的cgroup.log确认没有报错之后,重启集群使cgroup配置生效。
6)执行耗费cpu的语句,验证是否cpu已经成功限制。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316647.html