【银河麒麟高级服务器操作系统】系统日志Call trace现象分析及处理全流程

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

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

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

文档中心:https://document.kylinos.cn


服务器环境以及配置

系统环境

物理机/虚拟机/云/容器

虚拟机

网络环境

外网/私有网络/无网络

私有网络

硬件环境

处理器:

 Hygon  C86  7285  32-core  Processor

内存:

 32 GiB

BIOS版本:

SeaBIOS

软件环境

具体操作系统版本

银河麒麟高级服务器操作系统 V10 SP1

内核版本

4.19.90-23.15.v2101.ky10.x86_64

现象描述

早6点左右虚拟机hang了好几分钟,出问题后把节点摘了,没在当前虚拟机跑了。在7点2分messages才有日志记录 有大量Call trace: list_del函数试图从链表中删除一个节点,但在检查该节点的next和prev指针时发现了不一致性   请排查虚拟机hang的原因以及分析排查Call trace情况。

现象分析

分析messages日志

Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.831889] list_del corruption. next->prev should be ffffd05b18a41ec8, but was ffffd05b11576848
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.833504] WARNING: CPU: 1 PID: 743 at lib/list_debug.c:56 __list_del_entry_valid+0x8a/0x90
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.835050] Modules linked in: nls_utf8 isofs binfmt_misc tcp_diag inet_diag sunrpc ext4 mbcache jbd2 kvm_amd ccp kvm irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel sg joydev virtio_balloon i2c_piix4 pcspkr psmouse ip_tables xfs libcrc32c sr_mod cdrom sd_mod ata_generic crc32c_intel cirrus drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops ttm drm virtio_net ata_piix net_failover virtio_console libata serio_raw virtio_scsi failover floppy dm_mirror dm_region_hash dm_log dm_mod
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.842887] CPU: 1 PID: 743 Comm: systemd-journal Kdump: loaded Tainted: G        W         4.19.90-23.15.v2101.ky10.x86_64 #1
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.845961] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.849036] RIP: 0010:__list_del_entry_valid+0x8a/0x90
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.850562] Code: c4 ff 0f 0b 31 c0 c3 48 89 f2 48 89 fe 48 c7 c7 b8 59 0e bc e8 67 56 c4 ff 0f 0b 31 c0 c3 48 c7 c7 f8 59 0e bc e8 56 56 c4 ff <0f> 0b 31 c0 c3 90 48 85 d2 41 55 41 54 55 53 74 5f 48 85 f6 74 64
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.853639] RSP: 0018:ffff9f66040cf8d8 EFLAGS: 00010082
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.855156] RAX: 0000000000000000 RBX: ffffd05b18a41ec0 RCX: 0000000000000006
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.856664] RDX: 0000000000000007 RSI: 0000000000000092 RDI: ffff94329c856890
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.858167] RBP: ffff943296a72000 R08: 0000000000063462 R09: 0000000000000018
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.859649] R10: ffff94321509e6d0 R11: ffff9432964aec70 R12: ffff9f66040cfbc8
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.861146] R13: 0000000000000000 R14: 0000000000000000 R15: ffffffffbc463908
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.862637] FS:  00007fab73427940(0000) GS:ffff94329c840000(0000) knlGS:0000000000000000
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.864170] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.865697] CR2: 00007fc4e2ee4000 CR3: 00000007dbb70000 CR4: 00000000003406e0
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.867242] Call Trace:
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.868728]  release_pages+0x17f/0x5a0
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.870214]  __pagevec_release+0x2b/0x30
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.871671]  shmem_undo_range+0x370/0x870
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.873265]  shmem_truncate_range+0x16/0x40
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.874725]  shmem_fallocate+0x175/0x4c0
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.876181]  vfs_fallocate+0x13f/0x270
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.877651]  ksys_fallocate+0x3c/0x70
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.879105]  __x64_sys_fallocate+0x1a/0x20
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.880563]  do_syscall_64+0x5b/0x1d0
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.882037]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.883509] RIP: 0033:0x7fab74467f45
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.884979] Code: 54 49 89 cd 55 53 49 89 d4 89 f5 89 fb 48 83 ec 18 e8 2f 76 01 00 4d 89 ea 41 89 c0 4c 89 e2 89 ee 89 df b8 1d 01 00 00 0f 05 <48> 3d 00 f0 ff ff 77 35 44 89 c7 89 44 24 0c e8 67 76 01 00 8b 44
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.888160] RSP: 002b:00007fff2d018c40 EFLAGS: 00000293 ORIG_RAX: 000000000000011d
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.889715] RAX: ffffffffffffffda RBX: 0000000000000021 RCX: 00007fab74467f45
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.891259] RDX: 0000000000000000 RSI: 0000000000000003 RDI: 0000000000000021
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.892752] RBP: 0000000000000003 R08: 0000000000000000 R09: 0000000000000000
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.894235] R10: 0000000008000000 R11: 0000000000000293 R12: 0000000000000000
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.895694] R13: 0000000008000000 R14: 0000000000000011 R15: 00007fff2d018e38
Jul  8 07:02:34 PLPSAPP1 kernel: [23274630.897180] ---[ end trace 101918ae875052b5 ]---

 do_syscall_64+0x5b/0x1d0
  __x64_sys_fallocate+0x1a/0x20 用户空间程序调用 fallocate,开始处理文件空间预分配
   ksys_fallocate+0x3c/0x70  虚拟文件系统的 fallocate 实现
    vfs_fallocate+0x13f/0x270
     shmem_fallocate+0x175/0x4c0  tmpfs文件系统的fallocate实现,处理共享内存文件系统的空间预分配
      shmem_truncate_range+0x16/0x40 在shmem_fallocate过程中,如果需要释放一些页面,会调用这个函数来执行截断操作
       shmem_undo_range+0x370/0x870 tmpfs 中撤销分配的函数,负责删除指定范围内的页面
        __pagevec_release+0x2b/0x30 在撤销或释放页面时,内核使用页面向量来批量操作,以提高效率。
         release_pages+0x17f/0x5a0 释放多个页面的核心函数,遍历页面列表并释放每个页面。

systemd-journald 服务在重启过程中失败,原因是日志文件已满(1.5G),没有剩余空间。收到 SIGTERM 信号后,systemd-journald 关闭,但在重新启动时,因日志文件已满,未能成功启动,导致超时。

Jul  8 07:02:49 PLPSAPP1 rsyslogd[38846]: imjournal: journal reloaded... [v8.1907.0 try https://www.rsyslog.com/e/0 ]
Jul  8 07:02:49 PLPSAPP1 rsyslogd[38846]: imjournal: journal reloaded... [v8.1907.0 try https://www.rsyslog.com/e/0 ]
Jul  8 07:02:49 PLPSAPP1 systemd-journald[36836]: Journal stopped
Jul  8 07:02:50 PLPSAPP1 systemd-journald[37081]: Journal started
Jul  8 07:02:50 PLPSAPP1 systemd-journald[37081]: Runtime Journal (/run/log/journal/aba8e21d9dc64b2193542d4b2caccc95) is 1.5G, max 1.5G, 0B free.
Jul  8 07:02:51 PLPSAPP1 systemd-journald[36836]: [23274690.936680] Received SIGTERM from PID 1 (systemd).
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274690.958033] systemd-journald.service: Failed with result 'timeout'.
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274690.960028] Failed to start Journal Service.
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274690.961478] Dependency failed for Flush Journal to Persistent Storage.
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274690.973694] systemd-journal-flush.service: Job systemd-journal-flush.service/start failed with result 'dependency'.
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274690.977363] systemd-journald.service: Service has no hold-off time (RestartSec=0), scheduling restart.
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274690.980372] systemd-journald.service: Scheduled restart job, restart counter is at 3.
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274690.982920] Stopped Journal Service.
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274690.987932] Starting Journal Service...
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274691.022359] titanagent_check_exception.service: Succeeded.
Jul  8 07:02:51 PLPSAPP1 systemd[1]: [23274691.024182] Started titanagent check exception.

systemd-joural(PID 743)一直存在警告,而后systemd-journal(PID 743)进程由于超时被kill,后续拉起来的systemd-journal(PID 37081)继续报警告。

sa日志分析

sar -rh -f sa08,查看内存使用情况,空闲内存还有很多。

sar -u -f sa08,查看CPU使用情况,问题发生时,用户态使用55%,内核态使用32%。

sar -P ALL -f sa08,查看CPU使用情况,6核CPU,用户态和内核态都使用较高。

sar -q -f sa08,问题发生时系统负载较高。

sar -d -f sa08,查看磁盘读写情况,发现在磁盘读写较低的情况下,await较高。设备sda和sdc的 %util 超过 20%,await 值都超过了 1000ms,表示 I/O 请求在队列中等待的时间很长,可能会导致系统性能下降。

分析小结

分析messages日志,从空间调用 fallocate 系统调用开始,经过多个层次的函数调用,最终到达具体文件系统(tmpfs)的实现。日志中出现的问题表明在这个过程中,内存链表操作发生了损坏,导致内核警告,且伴随提示丢失了40多万行的内核日志信息,记录的情况也已经不是问题的第一现场,出现链表检测错误告警后并不会进行修复,在接下来使用到问题链表时,依旧会出发告警情况。

日志系统进行预分配,需要在tmpfs中进行,且伴随内存页的迁移情况,其中伴随page->lru链表的告警的信息输出,由于日志系统存储在tmpfs中,也造成一定的hang住情况,丢失了不少内核信息,也丢失了问题第一现场

分析sa日志,磁盘读写延迟非常高。长时间的I/O等待会导致内存中的数据迟迟不能写入磁盘,可能影响内存的释放和管理,可能会影响文件系统的元数据操作,如链表操作和页表管理。 

从目前的日志情况没有直接的原因说明系统hang住的情况,可能存在其他进程依赖日志输出,日志又被卡住,造成这种依赖的应用系统hang情况  

下一步计划

建议日志系统存储到/var/log中,不存储在内存文件系统中,这样避免复现问题丢失日志情况,进一步有助于问题分析。

#创建目录  /var/log/journal    

mkdir -p /var/log/journal     

#修改/etc/systemd/journald.conf文件

[Journal]
SystemMaxUse=2G
SystemMaxFileSize=128M

而后执行systemctl restart systemd-journald

问题出现后,在未重系统启前,可以echo c > /proc/sysrq-trigger手动触发vmcore,收集vmcore进行进一步分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/966925.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录_二叉树

二叉树 二叉树的递归遍历 144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历 // 前序遍历递归LC144_二叉树的前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new ArrayList<Integer&g…

科普书《从一到无穷大》的科普知识推翻百年集论

科普书《从一到无穷大》的科普知识推翻百年集论 黄小宁 “我们给两组无穷大数列中的各个数一一配对&#xff0c;如果最后这两组都一个不剩&#xff0c;这两组无穷大就是相等的&#xff1b;如果有一组还有些数没有配出去&#xff0c;这一组就比另一组大些&#xff0c;或者说强些…

算法【Java】—— 动态规划之回文串问题

回文子串 https://leetcode.cn/problems/palindromic-substrings 我们可以使用二维的 dp 表记录所有的子串情况&#xff0c;dp[i][j] 表示 以 i 起始&#xff0c;j 结尾的子串是否是回文串 状态转移方程推导&#xff1a;回文串要求开头和结尾的两个元素必须是相同的&#xff…

【Linux】从零开始:编写你的第一个Linux进度条小程序

Linux相关知识点可以通过点击以下链接进行学习一起加油&#xff01;初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言专栏&#xff1a;C语言 &am…

01_Machine Vision_LSI及傅立叶变换

outline 图像分解和线性时不变系统二维傅立叶变换图像采样 图像分解和线性时不变系统 图像数学表达 图像由基本的像素点组成&#xff0c;如果将每一个像素点看作一个脉冲&#xff0c;则每个像素点的值可以看作是脉冲的幅值&#xff0c;这样图像就可以看作是由一系列脉冲组成…

Win11下搭建Kafka环境

目录 一、环境准备 二、安装JDK 1、下载JDK 2、配置环境变量 3、验证 三、安装zookeeper 1、下载Zookeeper安装包 2、配置环境变量 3、修改配置文件zoo.cfg 4、启动Zookeeper服务 4.1 启动Zookeeper客户端验证 4.2 启动客户端 四、安装Kafka 1、下载Kafka安装包…

自动化xpath定位元素(附几款浏览器xpath插件)

在 Web 自动化测试、数据采集、前端调试中&#xff0c;XPath 仍然是不可或缺的技能。虽然 CSS 选择器越来越强大&#xff0c;但面对复杂 DOM 结构时&#xff0c;XPath 仍然更具灵活性。因此&#xff0c;掌握 XPath&#xff0c;不仅能提高自动化测试的稳定性&#xff0c;还能在爬…

尝试一下,交互式的三维计算python库,py3d

py3d是一个我开发的三维计算python库&#xff0c;目前不定期在PYPI上发版&#xff0c;可以通过pip直接安装 pip install py3d 开发这个库主要可视化是想把自己在工作中常用的三维方法汇总积累下来&#xff0c;不必每次重新造轮子。其实现成的python库也有很多&#xff0c;例如…

手机向电脑传输文件方法有哪些?

手机和电脑已经成为我们日常生活和工作中不可或缺的工具&#xff0c;而它们之间的文件传输需求也日益增加。为了帮助大家更高效地完成这一任务&#xff0c;本文将介绍三种常用的手机向电脑传输文件方法&#xff0c;方便您根据不同场景选择合适的方式。 方法1.数据线 当您有数…

【ESP32】ESP-IDF开发 | WiFi开发 | HTTP服务器

1. 简介 1.1 HTTP HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff0c;全称超文本传输协议&#xff0c;用于从网络服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效&#xff0c;使网络传输减少。它不仅保证计算机正确快速地传输超文本文档…

生成式聊天机器人 -- 基于Pytorch + Global Attention + 双向 GRU 实现的SeqToSeq模型 -- 下

生成式聊天机器人 -- 基于Pytorch Global Attention 双向 GRU 实现的SeqToSeq模型 -- 下 训练Masked 损失单次训练过程迭代训练过程 测试贪心解码(Greedy decoding)算法实现对话函数 训练和测试模型完整代码 生成式聊天机器人 – 基于Pytorch Global Attention 双向 GRU 实…

DeepSeeek如何在Window本地部署

一、Ollama Ollama 是一个开源的本地化大语言模型&#xff08;LLM&#xff09;运行工具&#xff0c;专注于简化大模型在本地环境中的部署、管理和交互。它支持多种主流开源模型&#xff08;如 Llama 2、Mistral、Phi-2 等&#xff09;&#xff0c;并提供了命令行和 API 接口&am…

01-SDRAM控制器的设计——案例总概述

本教程重点▷▷▷ 存储器简介。 介绍 SDRAM 的工作原理。 详细讲解SDRAM 控制的Verilog 实现方法。 PLL IP和FIFO IP 的调用&#xff0c;计数器设计&#xff0c;按键边沿捕获&#xff0c;数码管控制。 完成SDRAM控制器应用的完整案例。 Signal Tap 调试方法。 准备工作▷…

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 &#xff08;1&#xff09;OSPFv2 验证的类型和意义。 &#xff08;2&#xff09;配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 &#xff08;3&#xff09;配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…

Office/WPS接入DeepSeek等多个AI工具,开启办公新模式!

在现代职场中&#xff0c;Office办公套件已成为工作和学习的必备工具&#xff0c;其功能强大但复杂&#xff0c;熟练掌握需要系统的学习。为了简化操作&#xff0c;使每个人都能轻松使用各种功能&#xff0c;市场上涌现出各类办公插件。这些插件不仅提升了用户体验&#xff0c;…

基于STM32HAL库的万年历系统

目录 前言 项目分析 CubeMX配置 工程文件结构 App文件夹 Lib文件夹 库文件代码 myrtc.c myrtc.h oled库&字符库 knob.c knob.h 业务逻辑代码 task_main.c task_main.h 前言 本篇博客来做一个简易的万年历系统&#xff0c;需要用到旋转编码器和0.96寸OLED屏幕…

【Matlab优化算法-第14期】基于智能优化算法的VMD信号去噪项目实践

基于智能优化算法的VMD信号去噪项目实践 一、前言 在信号处理领域&#xff0c;噪声去除是一个关键问题&#xff0c;尤其是在处理含有高斯白噪声的复杂信号时。变分模态分解&#xff08;VMD&#xff09;作为一种新兴的信号分解方法&#xff0c;因其能够自适应地分解信号而受到…

蓝耘智算平台与DeepSeek R1模型:推动深度学习发展

公主请阅 前言何为DeepSeek R1DeepSeek R1 的特点DeepSeek R1 的应用领域DeepSeek R1 与其他模型的对比 何为蓝耘智算平台使用蓝耘智算平台深度使用DeepSeek R1代码解释&#xff1a;处理示例输入&#xff1a;输出结果&#xff1a; 前言 在深度学习领域&#xff0c;创新迭代日新…

5、大模型的记忆与缓存

文章目录 本节内容介绍记忆Mem0使用 mem0 实现长期记忆 缓存LangChain 中的缓存语义缓存 本节内容介绍 本节主要介绍大模型的缓存思路&#xff0c;通过使用常见的缓存技术&#xff0c;降低大模型的回复速度&#xff0c;下面介绍的是使用redis和mem0&#xff0c;当然redis的语义…

windows蓝牙驱动开发-调试及支持的HCI和事件

调试蓝牙配置文件驱动程序 开发蓝牙配置文件驱动程序时&#xff0c;可以使用驱动程序验证程序来协助其调试。 若要启用验证检查&#xff0c;必须为 Bthusb.sys 启用驱动程序验证程序。 如果不执行此操作&#xff0c;将禁用验证检查。 若要完全利用验证检查&#xff0c;请确保…