【银河麒麟高级服务器操作系统】soft lockup软锁实例详细记录分析及处理建议

本文主要是介绍【银河麒麟高级服务器操作系统】soft lockup软锁实例详细记录分析及处理建议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

了解更多银河麒麟操作系统全新产品,请点击访问

麒麟软件产品专区:https://product.kylinos.cn

开发者专区:https://developer.kylinos.cn

文档中心:https://documentkylinos.cn

现象描述

启nginx服务,但是报了softlock的错误,而且当时负载比较高,资源占用

现象分析

message日志分析

查看message日志,发现在问题发生时在CPU 3上运行的nginx进程触发了大量的soft lockup软锁报错。

查看这些soft lockup软锁日志信息,发现从11:17-13:03里出现的这三十多次软锁报错基本一致,下面选取11:17:28时第一次出现软锁报错的日志进行分析。

May 14 11:17:28 localhost kernel: [1712957.391935] watchdog: BUG: soft lockup - CPU#3 stuck for 22s! [nginx:2858164]

May 14 11:17:28 localhost kernel: [1712957.393937] Modules linked in: qax_tq_base(OE) binfmt_misc ipt_MASQUERADE nf_conntrack_netlink nfnetlink iptable_nat nf_nat_ipv4 xt_addrtype iptable_filter xt_conntrack nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 br_netfilter bridge stp llc overlay sunrpc vfat fat aes_ce_blk crypto_simd cryptd aes_ce_cipher ghash_ce sha2_ce sha256_arm64 sha1_ce sch_fq_codel ip_tables virtio_net net_failover failover virtio_gpu ttm virtio_console [last unloaded: qax_tq_base]

May 14 11:17:28 localhost kernel: [1712957.403317] CPU: 3 PID: 2858164 Comm: nginx Kdump: loaded Tainted: G           OE     4.19.90-17.ky10.aarch64 #1

May 14 11:17:28 localhost kernel: [1712957.405727] Hardware name: SmartX SMTX OS, BIOS 0.0.0 02/06/2015

May 14 11:17:28 localhost kernel: [1712957.407187] pstate: 60400005 (nZCv daif +PAN -UAO)

May 14 11:17:28 localhost kernel: [1712957.408391] pc : clear_page+0x10/0x24

May 14 11:17:28 localhost kernel: [1712957.409341] lr : __cpu_clear_user_page+0xc/0x18

May 14 11:17:28 localhost kernel: [1712957.410470] sp : ffff8003d655fb70

May 14 11:17:28 localhost kernel: [1712957.411351] x29: ffff8003d655fb70 x28: 0000000000000002

May 14 11:17:28 localhost kernel: [1712957.412656] x27: ffff8003cf72f360 x26: ffff8003d1f94f80

May 14 11:17:28 localhost kernel: [1712957.413956] x25: 0000ffff6f680000 x24: 0000ffff6f680000

May 14 11:17:28 localhost kernel: [1712957.415244] x23: ffff8003cf72f300 x22: ffff8003d9ce7710

May 14 11:17:28 localhost kernel: [1712957.416559] x21: ffff8003d655fc88 x20: ffff7fe000441700

May 14 11:17:28 localhost kernel: [1712957.417853] x19: 0000000000000000 x18: 0000000000000000

May 14 11:17:28 localhost kernel: [1712957.419165] x17: 0000000000000000 x16: 0000000000000000

May 14 11:17:28 localhost kernel: [1712957.420475] x15: 0000000000000000 x14: 0000000000000000

May 14 11:17:28 localhost kernel: [1712957.421774] x13: 0000000000000000 x12: 0000000000000000

May 14 11:17:28 localhost kernel: [1712957.423109] x11: 0000000000000000 x10: 0000000000000001

May 14 11:17:28 localhost kernel: [1712957.424453] x9 : ffff8003ffeb3ed8 x8 : 00008003f6e80000

May 14 11:17:28 localhost kernel: [1712957.425768] x7 : 0000000000000000 x6 : 0000000000000001

May 14 11:17:28 localhost kernel: [1712957.427096] x5 : 000000000000fffd x4 : 00008003f6e80000

May 14 11:17:28 localhost kernel: [1712957.428427] x3 : 0000000000000897 x2 : 0000000000000004

May 14 11:17:28 localhost kernel: [1712957.429751] x1 : 0000000000000040 x0 : ffff8001105c0000

May 14 11:17:28 localhost kernel: [1712957.431061] Call trace:

May 14 11:17:28 localhost kernel: [1712957.431732]  clear_page+0x10/0x24

May 14 11:17:28 localhost kernel: [1712957.432624]  wp_page_copy+0x514/0x6d0

May 14 11:17:28 localhost kernel: [1712957.433590]  do_wp_page+0x98/0x648

May 14 11:17:28 localhost kernel: [1712957.434476]  __handle_mm_fault+0x828/0xc10

May 14 11:17:28 localhost kernel: [1712957.435519]  handle_mm_fault+0x104/0x200

May 14 11:17:28 localhost kernel: [1712957.436520]  do_page_fault+0x210/0x508

May 14 11:17:28 localhost kernel: [1712957.437471]  do_mem_abort+0x3c/0xd0

May 14 11:17:28 localhost kernel: [1712957.438368]  el0_da+0x24/0x28

问题时间点首次触发soft lockup的内核日志如上所示,可以看到触发软锁的原因是CPU 3上nginx:2858164卡住22秒无响应。之后查看该软锁对应的call trace堆栈,可以看到此时nginx进程遇到了一个内存缺页异常,在进行写时复制处理时尝试清理内存页面内容,但该操作长时间未完成导致CPU 3长时间未响应触发软锁。

do_mem_abort //内存访问异常函数

->do_page_fault //直接处理页面错误的函数,包括分配新页面或从磁盘加载页面到内存等操作

->handle_mm_fault //用于用户空间内存访问错误的处理,__handle_mm_fault函数的上层调用

->__handle_mm_fault //内核处理内存管理故障的核心函数

->do_wp_page //处理写保护页面的函数

->wp_page_copy //写时复制(Copy-on-Write, COW)机制处理,当一个进程试图写入共享页面时,会触发此操作

->clear_page //用于清除页面的内容,通常作为页面分配或回收过程的一部分

从上述堆栈上来看这是一个正常的处理流程,进程触发内存缺页中断,并在处理写保护页时进行内存页清理处理。通常来说内存清理不会花费大量的时间,除非相关硬件存在问题或系统内存处于一个十分紧张的状态,一直无法得到一个可用的内存页。

内存使用情况分析

上面我们分析nginx应用触发软锁的原因,针对问题可能出现的原因,我们要去分析问题时间点的系统内存资源使用情况。

首先查看系统整体内存及min_free_kbytes参数情况,可以看到当前机器总内存为16143744KB,min_free_kbytes为802944KB。

查看问题时间点的sar日志,可以看到在5.14日的11:10后系统空闲内存突然下降到min水位线附近,available直接降至为0。从11:10-11:20这十分钟里系统内存就到了一个及其紧张的地步。

而查看这十分钟内存的一个内存使用变化,我们发现了一个十分奇怪的现象。在11:10时,系统的缓存cached、匿名内存anonpg、slab、free等参数加起来之和为15924576KB,和系统总内存大小基本一致。

但到了11:20时free和cached大幅度下降,anonpg、slab等内存却又没有明显上升。同样计算各类内存参数统计之和后发现仅有4338688KB,远小于总内存大小,大量内存突然异常消失。这应该就是导致nginx进程在触发缺页异常时一直无法清理得到一个可用内存页的原因。

内存异常消失情况分析

Linux kernel并没有滴水不漏地统计所有的内存分配,kernel动态分配的内存中就有一部分没有计入/proc/meminfo中。大量内存突然不知所踪,无法在各类内存统计项中找到,这个通常被称为内存黑洞或者内存幽灵现象。

由于黑洞内存无法直接找到,通常都是要根据历史经验并结合实际环境进行相关分析。当前环境已经重启,无法再追踪问题时间的相关信息。但这类问题通常都是由于驱动应用、硬件异常或是虚拟化环境宿主机异常导致。

例如华为hns3网卡驱动初始化会占用大量内存、VMware的balloon驱动会在宿主机内存紧张时直接挤占虚拟机内存,又或是物理机硬件、虚拟化环境异常导致虚拟化系统层无法获取相关内存状态。

本次问题环境查看为虚拟化环境,且是在运行了一段时间后才出现大量内存不知所踪,因此问题原因大概率在虚拟化平台。

建议排查虚拟机问题时间点进行的相关操作以及宿主机虚拟化平台状态。

总结

综上所述,本次服务器出现soft lockup的原因为nginx进程启动时进行内存缺页异常处理,在进行写时复制处理时尝试清理内存页面内容,但该操作长时间未完成导致CPU 3长时间未响应触发软锁。

查看soft luckup堆栈,这是一个正常的处理流程,进程触发内存缺页中断,并在处理写保护页时进行内存页清理处理。通常来说内存清理不会花费大量的时间,除非相关硬件存在问题或系统内存处于一个十分紧张的状态,一直无法得到一个可用的内存页。

分析问题时间点内存使用情况,发现在11:10-11:20中系统大量内存突然不知所踪,available直接变为0,free也来到min水位线附近。这就是导致上述nginx进程启动卡在clear_page函数的原因。

对于大量内存突然不知所踪,无法在各类内存统计项中找到这类内存黑洞现象,通常都是由于驱动应用、硬件异常或是虚拟化环境宿主机异常导致。建议排查虚拟机问题时间点进行的相关操作以及宿主机虚拟化平台状态。

备注

除了上述soft lockup问题外,服务器重启后nginx version: openresty/1.21.4.1应用在reload后就会一直有个进程shutting down,要等几分钟才能没有。

对该现象,由于应用并非麒麟方面适配的rpm应用,而是自行安装,无法确认应用编译、安装时是否存在问题。但nginx应用reload后进程出现shutting down状态本身是个正常现象。使用 reload重载nginx,这是一种平滑重启的方案,不会把已有的连接断掉,而是会继续维护已有连接的 nginx 进程,这些进程会进入worker process is shutting down 状态,直至其所有连接处理结束才会退出,退出之前这些shutting down 状态的worker不会处理新的连接。

这篇关于【银河麒麟高级服务器操作系统】soft lockup软锁实例详细记录分析及处理建议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123291

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n