1.由Docker BUG引起的源码源码Linux宕机事故及解决办法
2.华为openEuler21.03版本怎么样
3.Linux内核调试:kdump、vmcore、源码源码crash、源码源码kernel-debuginfo
由Docker BUG引起的Linux宕机事故及解决办法
1背景
某运营商业务系统的服务器发生宕机,针对本次宕机事故进行排查。源码源码
文章福利小编推荐自己的源码源码查询授权源码Linux内核源码交流群: 整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,源码源码有需要的源码源码可以自行添加哦!!源码源码!源码源码前名可进群领取,源码源码并额外赠送一份价值的源码源码内核资料包(含视频教程、电子书、源码源码实战项目及代码)!源码源码
学习直通车: Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈
2解决过程
我们都知道kdump是源码源码在Linux系统崩溃、死锁、死机的时候用来转储内存运行参数的服务。系统崩溃后内核无法正常工作,这时kdump会产生一个用于capture当前运行信息的内核,将此时的内存中的所有运行状态和数据信息收集到vmcore文件中,收集完成后系统将自动重启。本次使用crash分析linux kdump日志。
进入crash控制台
PANIC为内核崩溃类型,这里是一个BUG,内核无法处理空指针
在crash查看log,发现有很多Out-of-Memory
通过bt查看系统崩溃前内核依次调用的一系列函数,查看内核在何处崩溃。以"# 数字"开头的行为调用堆栈:
通过bt分析,可以定位到崩溃前的一个exception是ip寄存器RIP的异常,使用dis命令来看一下该地址的反汇编结果:
从上面的反汇编结果中,我们看到问题出在ip6mr.c文件行代码,翻开linux源码的相应位置:
撸内核源码 + Google
通过走读Linux源码和Google,发现当系统创建新的namespaces时,会因为ip6mr_sk_done的值为空而引起系统混乱,从而导致内核无法正常分配内存,所以我们在log文件中看到了许多Out-of-Memory。
在Kubernetes环境,溪谷游戏平台源码提到namespaces就能想到docker,因为namespaces是docker的核心技术之一,容器的资源隔离由namespace来实现。
通过检查docker的网络,发现其中一个子网为空
解决办法
内核配置加入"net.ipv6.conf.all.disable_ipv6 = 1",关闭 IPV6,防止触发 docker BUG;
从内核的层面看,目前该Issue仍然没有close。在开启IPv6的环境,docker为什么会出现这个BUG,后续有空再研究,欢迎大家指正。
3END
Linux 内核虽然号称“不死族”,几乎不会崩溃或死机,但也有特殊情况,设备也有一定的使用周期,系统的高可用还是要的。
虽然你单点运行服务时很帅,但是你处理故障时的样子真的很狼狈。
往期精彩推荐:
最新干货!使用eBPF LSM热修复Linux内核漏洞
盘点那些Linux内核调试手段——内核打印
Linux 环境下网络分析和抓包是怎么操作的?
浅谈ARMLinux内核页表的块映射
Linux性能观测之dstat命令详解
华为openEuler.版本怎么样
华为 openEuler .是华为发布的全新创新桌面选择。该版本属于全新的创新版本而不是 LTS (Long Term Support) 版本。全新的创新桌面为用户们带来的是更强的虚拟化功能和更多桌面选择支持。
华为 openEuler .介绍
全新的5.内核
1、深度优化调度、IO、内存管理,提供Arm、x、RISC-V等更多计算能力支持。
2、对调度程序进行了优化,以优化CFS任务的公平性,并添加了感知numa的异步调用机制,这在NVDIMM初始化方面有了显著的改进;优化了SCHED_IDLE的调度策略,显著提高了高优先级任务的调度延迟,降低了其他任务干扰的成本。
3、骑砍 1.168 源码numa平衡机制的优化带来了更好的亲和性、更高的利用率和更少的无效迁移。
4、增强CPU隔离机制,支持中断隔离,支持非绑定线程隔离,增强CPU内核隔离,更好地避免业务间相互干扰。
5、优化了cgroup单线程迁移的性能,消除了对线程组读写信号量的依赖;时间名称空间的引入使得容器迁移更加方便。
6、系统容器支持限制容器中使用的文件句柄的数量。文件句柄包括普通的文件句柄和网络套接字。在启动容器时,可以指定——files-limit参数来限制容器中打开句柄的最大数量。
7、PSI能力支持。PSI (Pressure Stall Information)提供了一种评估系统资源(如CPU、内存和IO)压力的方法。准确的检测方法可以帮助资源用户确定合适的工作量,也可以帮助系统制定高效的资源调度策略,最大限度地利用系统资源,最大限度地提高用户体验。
8、进程间通信优化,pipe/epoll_wait唤醒机制优化,解决唤醒多个等待线程的性能问题。
9、增强内存管理、细化内存控制、统计、异构内存、热插拔、内存初始化等功能得到了改进,并提供了更有效的酷享网源码用户控制界面;热点锁和信号量优化,激进的内存调节和碎片整理,优化、vmap/vmalloc机制,显著提高内存应用效率;KASAN, kmemleak, slub_debug, oom和其他内存维护功能都得到了增强,以提高内存问题的定位和解决效率。
、提前发包时间模式开关解决了原有TCP框架在报文发送过程中的局限性。根据调度策略,为数据包设置EDT时间戳,避免了队列缓冲区过大造成的延迟,从而大大提高了TCP的性能。
、支持多路径TCP,可以提高移动和数据场景下的性能和可靠性,支持负载均衡场景下多个子流并行传输。
、引入了log fast commit方法,而EXT4引入了一种新的、更轻量级的日志记录方法——fast commit,它可以极大地加快耗时的操作,比如fsync,并带来更好的性能。
、支持dm写cache特性,提高SSD大容量顺序写性能,提高DDR持久化内存性能。
、io_uring是一个新的异步IO框架和实现,支持轮询模式。在轮询模式下,性能得到了与spdk类似的显著提高,队列深度越高,性能越好。
、支持ILP,在鲲鹏 Arm环境下支持位应用程序。iview工程修改源码
、IMA商业增强,基于开源IMA解决方案,增强安全性,提高性能,提高易用性,并帮助商业实现。
、支持单任务栈巡检,增强对ROP攻击的防范能力。
、MPAM资源管理和控制,支持Arm架构的缓存QoS和内存带宽控制技术。
、支持基于sedim的NMI机制和基于pmu的NMI机制,实现硬锁检测;启用perf nmi可以实现更准确的性能分析。
、Arm平台支持虚拟机CPU热插拔,提高了资源配置的灵活性。
、Arm kdump得到了增强,支持4G以上地址的内存预留,这样kdump可以预留更多的内存空间,并支持具有更大内存的机器。
、支持树莓派系列板。Raspberry Pi的支持已经集成到本地的openEuler .内核中,可以直接使用openEuler .内核源代码进行调试。
、RISC-V平台支持KVM虚拟化。
、支持智能网卡。
热内核升级
1、热内核升级是修复和升级操作系统漏洞的解决方案。实现了无服务意识的内核快速热替换。
2、Cpu Park和Quick Kexec的功能加速系统启动和停止,减少停机时间,提高系统可用性。
3、Pin存储器和Pmem功能可确保快速准确地恢复业务流程,并提高业务灵活性。
4、内核热升级控制器提供gRPC通讯接口,使用方便。
内存分层扩展
1、支持多内存和存储介质的统一管理,支持系统容量的平滑扩展。
2、冷热页识别,通过内核态内存页的空闲和空闲统计机制,准确识别进程内存页访问的冷热分布。
3、可以配置淘汰策略,提供配置界面,自定义内存页面冷热分类策略。
4、平滑扩展,冷页自动切换到扩展内存,其上部署的软件兼容运行,无需改变或调整编程模式。
5、支持多媒体扩展,支持单片机、XL Flash、NVMe SSD等介质作为扩展内存,并根据介质本身的访问速度指定冷热内存分层方案,以达到扩展内存、降低性能损失的目的。
6、增强的虚拟化能力和可维护的测量能力。
7、增加了热迁移Pro的能力扩展,提高了可维护性和可测性。
8、热迁移专业版功能,增强热迁移多功能支持TLS,确保迁移过程中的数据安全;支持热迁移数据的并行压缩,提高迁移性能;增加数据页面访问频率的统计,支持热迁移数据的早期预测。
9、vmtop性能调试工具可以实时动态查看虚拟机的资源使用情况,包括CPU占用率、内存占用率等信息。增加了支持x_架构的扩展。
、支持IO挂起。默认情况下,当发生io错误时,IO会自动重试,超时后会报告警报。
、RISC-V架构支持虚拟化热迁移。
轻量级虚拟运行时
1、添加灵活的内存,大页面功能,系统调用过滤功能,增强IO子系统,提高性能和稳定性。
2、灵活的内存支持,根据工作负载的内存需求实现内存分配和恢复,virtio-balloon的内存恢复速度可达3GB/s。
3、大页面支持。在轻量级框架中提供大页面支持,可以为轻量级虚拟机提供连续的物理内存页面,提高虚拟机的内存访问效率。
4、系统调用过滤简化了设备模型,增加了对系统调用过滤的支持,只需要最简单配置的个系统调用,有效减少了系统攻击面。
5、输入输出子系统得到增强,以支持多通道并发输入输出能力并提高性能。支持IO- qos能力,增强虚拟机IO流量管理的灵活性和稳定性。open stack 维多利亚集成。
6、简单、可扩展、丰富、统一的云管理操作系统。更多功能见OpenStack Victoria官方发行说明。
7、通过集成openStack Vicoria版本实现IaaS(基础设施即服务)解决方案。
8、增强数据块存储的服务能力,并添加容量扩展、快照和虚拟机映像克隆等高级功能。
9、增强集装箱化部署和网络能力,以便更好地与集装箱集成。
、添加扩展服务支持,并支持扩展服务,如控制面板管理、裸机部署和云资源跟踪。
Kubernetes 1.集成
1、有关云本机操作系统自动部署、扩展和管理容器化应用程序的更多功能,请参考Kubernetes 1.的官方发行说明。
2、自动联机和回滚。Kubernetes会自动将应用程序或其配置更改的实例联机,并监控应用程序的运行状态。如果失败,将回滚以前的更改。
3、服务发现和负载均衡,支持基于容器IP和DNS名称的服务发现和负载均衡。
4、存储业务流程支持自动挂载多个存储后端,如本地存储、NFS、iSCSI、Gluster、Ceph等网络存储系统。
5、水平扩展,支持命令行扩展,用户界面手动扩展,根据CPU占用率自动扩展。
Linux内核调试:kdump、vmcore、crash、kernel-debuginfo
本文将深入探讨 Linux 内核调试技术,主要涉及 kdump、vmcore、crash、以及 kernel-debuginfo 的应用与安装。
kdump 是 Linux 内核崩溃时生成内核转储文件(vmcore)的机制,vmcore 文件包含内核崩溃时的状态,可用于诊断内核崩溃原因。crash 是一个广泛使用的内核崩溃转储文件分析工具,通过使用 crash,我们可以从 vmcore 文件中获取详细信息,来定位和解决内核问题。
为了充分发挥 crash 的功能,需要安装 crash 工具和内核调试工具 kernel-debuginfo。确保安装的版本与 Linux 内核相匹配,可通过执行 `uname -a` 命令查看内核版本。然后,按照以下步骤安装必要的组件:
1. **安装 kexec-tools**:执行 `yum search kexec-tools` 查找 kexec-tools 包,然后使用 `yum install kexec-tools.x_` 进行安装。
2. **配置 kdump**:通过编辑 `/boot/grub/menu.lst` 设置 `crashkernel=auto`,并使用 `vim /etc/kdump.conf` 设置核心转储文件的保存路径,例如 `/var/crash`。最后,启动 kdump 服务,执行 `service kdump start`。
3. **安装 crash**:查找 crash 包,执行 `yum install crash.x_` 安装。
4. **安装 kernel-debuginfo**:安装两个相关 rpm 包,`rpm -ivh kernel-debuginfo-common-x_-2.6.-.el6.x_.rpm` 和 `rpm -ivh kernel-debuginfo-2.6.-.el6.x_.rpm`。
安装完成后,可以通过模拟内核崩溃来测试 kdump 的功能。执行 `echo c > /proc/sysrq-trigger`,这样内核就会崩溃,并在 `/var/crash` 目录下生成 vmcore 文件。接下来,使用 crash 工具分析 vmcore 文件,执行命令 `/usr/bin/crash /usr/lib/debug/lib/modules/2.6.-.el6.x_/vmlinux vmcore`。具体的分析过程可参考“Linux 内核:分析 coredump 文件 - 内核代码崩溃”。
Linux 内核源码的高级知识可以加入开发交流群获取。群内提供免费资源、公开课技术分享,入群不亏,欢迎加入。
资源免费领
学习直通车