内存不可用报错:memory temporarily unavailable 的排查方法

举报
你怎么不讲道理 发表于 2020/12/30 20:48:27 2020/12/30
【摘要】 1.当出现memory temporarily unavailable报错时,首先根据报错信息确认具体是哪个cn/dn报的,如果报错信息前面没有类型dnxxxx_xxxx这样的信息,就是cn报的,需要去每个cn的日志里排查是哪个cn2.通过free -g或top查看当前内存的使用情况,确认是操作系统内存耗尽,还是因为cn/dn的内存使用达到限制,如果已经没有现场,可以通过查看/var/log...

1.当出现memory temporarily unavailable报错时,首先根据报错信息确认具体是哪个cn/dn报的,如果报错信息前面没有类型dnxxxx_xxxx这样的信息,就是cn报的,需要去每个cn的日志里排查是哪个cn

2.通过free -g或top查看当前内存的使用情况,确认是操作系统内存耗尽,还是因为cn/dn的内存使用达到限制,如果已经没有现场,可以通过查看/var/log/osinfo中的meminfo来确认当时操作系统的可用内存;

meminfo日志:

image.png

下面我们分两种场景讨论

场景一:

操作系统没有可用内存

对于操作系统内存耗尽的场景,往往会触发操作系统的oom保护机制,这个在/var/log/message中可以搜索关键字‘kill’可以找到相关信息;

操作系统在oom杀掉进程时,会打印各个进程的内存使用情况,需要注意的是,rss列的单位并不是b,而是page,在x86服务器上需要乘以4k来计算得到进程实际使用内存大小,在arm服务器上要乘以16k

通过比较进程被杀时的内存和max_process_memory,如果被杀时仍未达到max_process_memory,则需考虑max_process_memory是否设置过大,可调整参数解决

如果进程被杀时内存已经超过了max_process_memory,可使用下面两个语句进一步分析

常用的监控语句

1)查看各类内存使用情况

select * from pv_total_memory_detail;

image.png

2)查看占用dynamic内存最高的语句

select * from (
select
sessid
,sum_total
,sum_free
,sum_used
,query_id
,query_start
,state
,waiting
,enqueue
,query
from
(
select
sessid
,sum(totalsize) as sum_total
,sum(freesize) as sum_free
,sum(usedsize) as sum_used
from
pv_session_memory_detail
group by
sessid ) a
,pg_stat_activity b
where
split_part ( a.sessid,'.' , 2 ) = b.pid )
order by
sum_total desc
limit 10;

image.png

注:上述第二条监控语句只是排查dynamic内存高的场景,如果第一条语句查出来的结果不是dynamic_used_memory或dynamic_peak_memory高,而是其他内存(other_used_memory、sctpcomm_used_memory等),则需另做排查,以后再开帖子详细介绍


场景二:

操作系统仍有可用内存,cn/dn实例的dynamic内存使用达到上限

对于有现场的情况,可以使用上面的第二条sql语句找到占用内存最高的语句,杀掉该语句并进行整改

对于没有现场的情况,可以部署监控脚本等待下次复现

另外,如果实例是cn,往往是因为有大量的不下推语句,可以在日志中搜索can't be shipped查看不下推的语句,并进行整改

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。