StarRocks BE宕机排查

StarRocks BE宕机排查

排查是否OOM

dmesg -T|grep -i oom #排查是否oom

原因:

2.X版本OOM原因

  • BE 的配置文件 (be.conf) 中 mem_limit 配置不合理,需要配置mem_limit=(机器总内存-其他服务占用内存-1~2g(系统预留))

比如机器内存40G,上面有个Mysql,理论上限会用4G,那么配置下mem_limit=34G (40-4-2)

排查系统参数

一般先检查下系统参数配置是否合理,建议参考 https://docs.starrocks.io/zh/docs/deployment/environment_configurations/ 配置。

尤其需要关注ulimit、overcommit和swap参数,检查方式如下

ulimit检查

需要关注max processes和max open files,需要确保>=65535

ulimit -a #查看系统配置
cat /proc/$be_pid/limits #查看be进程配置

overcommit检查

以下值应该为 1

cat /proc/sys/vm/overcommit_memory

swap检查

以下值应该为 0,确保关闭swap

cat /proc/sys/vm/swappiness

排查BE日志

如上参数配置正确的前提下,如果还存在crash,当前crash都会在be.out中打印异常栈

首先获取be.out

# less be.out

query_id:0862041d-07bd-11f0-9214-005056853513, fragment_instance:0862041d-07bd-11f0-9214-005056853518

..............

*** Aborted at 1742716891 (unix time) try "date -d @1742716891" if you are using GNU date ***
PC: @          0x527d26b starrocks::SegmentIterator::_finish_late_materialization()
*** SIGSEGV (@0x0) received by PID 22176 (TID 0x7f06987b1700) from PID 0; stack trace: ***
    @          0x688b642 google::(anonymous namespace)::FailureSignalHandler()
    @     0x7f089e584630 (unknown)
    @          0x527d26b starrocks::SegmentIterator::_finish_late_materialization()
    @          0x5288648 starrocks::SegmentIterator::_do_get_next()
    @          0x528aa30 starrocks::SegmentIterator::do_get_next()
    @          0x530e573 starrocks::ProjectionIterator::do_get_next()
    @          0x5994675 starrocks::SegmentIteratorWrapper::do_get_next()
    @          0x57c62d3 starrocks::TimedChunkIterator::do_get_next()
    @          0x5341706 starrocks::TabletReader::do_get_next()
    @          0x3b0271b starrocks::pipeline::OlapChunkSource::_read_chunk_from_storage()
    @          0x3b02e42 starrocks::pipeline::OlapChunkSource::_read_chunk()
    @          0x3afba17 starrocks::pipeline::ChunkSource::buffer_next_batch_chunks_blocking()
    @          0x37c0c38 _ZZN9starrocks8pipeline12ScanOperator18_trigger_next_scanEPNS_12RuntimeStateEiENKUlvE_clEv
    @          0x38d4c91 starrocks::workgroup::ScanExecutor::worker_thread()
    @          0x2ed30ec starrocks::ThreadPool::dispatch_thread()
    @          0x2ecc7ba starrocks::Thread::supervise_thread()
    @     0x7f089e57cea5 start_thread
    @     0x7f089d97d9fd __clone
    @                0x0 (unknown)
  1. 可先通过关键去常见 Crash / BUG 堆栈查询 搜索(上面关键字是 _finish_late_materialization),判断是不是已知问题;
  2. 根据query_id去fe审计日志查找sql;

参考:https://forum.mirrorship.cn/t/topic/4930

### 排查Linux系统宕机的原因 当遇到Linux系统宕机的情况时,需要从多个方面入手进行排查,包括系统资源使用情况、日志分析、硬件问题等。 #### 查看系统资源使用情况 首先,应该检查系统的资源使用情况,特别是内存和CPU的使用情况。可以通过命令`top`或者`htop`来查看当前的CPU和内存使用情况。如果发现内存使用接近极限,可以进一步使用`free -m`命令来查看内存的具体使用情况: ```bash free -m ``` 如果内存不足,可能会导致系统触发OOM Killer来终止某些进程以释放内存。可以通过检查`/var/log/messages`或`/var/log/syslog`(取决于发行版)来查找是否有OOM Killer活动的迹象: ```bash grep -i 'oom' /var/log/messages ``` #### 分析系统日志 系统日志是排查宕机原因的重要工具。主要的日志文件位于`/var/log/`目录下,包括但不限于: - `/var/log/messages`: 系统启动后的信息和错误日志。 - `/var/log/secure`: 安全相关的日志信息。 - `/var/log/maillog`: 邮件相关的日志信息。 - `/var/log/cron`: 定时任务相关的日志信息。 - `/var/log/spooler`: UUCP和news设备相关的日志信息。 - `/var/log/boot.log`: 守护进程启动和停止相关的日志消息。 - `/var/log/wtmp`: 永久记录每个用户登录、注销及系统的启动、停机的事件。 为了实时查看系统日志,可以使用`tail`命令: ```bash tail -1000f /var/log/messages ``` #### 检查硬件问题 硬件问题也可能导致系统宕机,例如过热导致的CPU降频甚至关机。可以通过检查系统日志来确认是否发生了过热事件: ```bash dmesg | grep -i 'thermal' ``` #### 使用Kdump进行内存转储 如果怀疑是内核崩溃导致的宕机,可以启用Kdump来捕获崩溃时的内存状态。Kdump允许在内核崩溃时快速启动到另一个内核,并保存崩溃内核的内存镜像[^3]。这需要预先配置好Kdump服务,并确保有足够的磁盘空间来存储内存转储文件。 #### 检查极端负载下的内核问题 在极端负载情况下,内核调度或驱动程序可能出现问题,导致系统崩溃。可以通过查看系统日志中的内核消息来识别这类问题: ```bash dmesg ``` ### 解决方案 #### 资源管理 对于资源耗尽的问题,可以通过优化应用程序、增加物理内存或调整系统参数来解决。 #### 日志分析与监控 定期分析系统日志可以帮助提前发现潜在的问题。此外,使用监控工具如Nagios、Zabbix等可以实时监控系统健康状况,并在出现问题时发出警报。 #### 内核更新与补丁 对于内核相关的问题,保持内核版本的更新,安装官方发布的安全补丁是非常重要的。 #### 硬件维护 定期检查硬件状态,确保散热系统正常工作,避免因过热而导致的系统不稳定。 #### 启用Kdump 启用Kdump功能可以帮助诊断内核崩溃的具体原因,从而采取相应的措施防止未来再次发生类似事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值