在虚拟化场景下,我们尽量会尝试使用带外监控的方式,来发现虚拟机的异常。pvpanic就是一种常见的方式,虚拟化场景的windows蓝屏检查也是基于如此。
1.概述 某年某月某日某项目的线上分布式文件系统服务器多台Linux系统kernel崩溃,严重影响了某项目对外提供服务的能力,在公司造成了不小影响。通过排查线上问题基本确定了是由于linux内核panic造成的原因,通过两个阶段的问题排查,基本上确定了linux内核panic的原因。排查问题的主要手段就是网上查找资料和根据内核错误日志分析并且构造条件重现。本文档就是对自己在整个问题排查过程中的总结。 2.第一阶段 因为刚出现问题的时候大家都比较紧急,每天加班都很晚,也制定了很多问题重现和定位原因的计划
这个版本主要是对 const fn 的提升: https://github.com/rust-lang/rust/pull/72437/
前文《[linux][qemu]PVPanic的实现原理以及应用》中,介绍了pvpanic的原理和基本的使用方法,KVM虚拟化场景下,使用pvpanic驱动可以监控到Guest的panic。
最近很少用 deepin 在线或者使用客户段听音乐了,喜欢下载到本地听那些熟悉的歌曲。
本文是描述Linux virtual memory运行参数的第二篇,主要是讲OOM相关的参数的。为了理解OOM参数,第二章简单的描述什么是OOM。如果这个名词对你毫无压力,你可以直接进入第三章,这一章是描述具体的参数的,除了描述具体的参数,我们引用了一些具体的内核代码,本文的代码来自4.0内核,如果有兴趣,可以结合代码阅读,为了缩减篇幅,文章中的代码都是删减版本的。按照惯例,最后一章是参考文献,本文的参考文献都是来自linux内核的Documentation目录,该目录下有大量的文档可以参考,每一篇都值得细细品味。
Android OS由3层组成,最底层是Kernel,上面是Native bin/lib,最上层是Java层:
之前我们和大家分享过EasyDSS开发的Dash版本,EasyDSS新增Dash版本后,可允许客户端根据网络带宽情况自动选择合适的码流进行播放,便于适应网络带宽抖动,同时最大程度上为终端用户提供最好的服务质量,此外,拥有Dash技术的EasyDSS还在CDN分发方面有着更大的优势。
廖威雄,就职于珠海全志科技股份有限公司,负责Linux IO全栈研发、性能优化、开源社区开发交流、Linux 内核开源社区pstore/blk,mtdpstore模块的作者、大客户存储技术支持、全志首个UBI存储方案主导人、全志首个RTOS NFTL主导人
cgroups(Control Groups)是 Linux 内核中的一种特性,它可以将进程分组并限制它们对系统资源(如 CPU、内存、磁盘和网络)的使用。Docker 使用 cgroups 来实现容器的资源隔离和限制,例如限制容器可以使用的 CPU 核心数量和内存大小。
The OOM Killer 是内核中的一个进程,当系统出现严重内存不足时,它就会启用自己的算法去选择某一个进程并杀掉. 之所以会发生这种情况,是因为Linux内核在给某个进程分配内存时,会比进程申请的内存多分配一些. 这是为了保证进程在真正使用的时候有足够的内存,因为进程在申请内存后并不一定立即使用,当真正使用的时候,可能部分内存已经被回收了。
本文主要分析Go语言的panic/recover在AMD64 Linux平台下的实现,包括:
一,softlockup: watchdog软狗/软锁----用于检测系统调度是否正常。 能响应中断,但调度异常。
当你面对一台新机器,出于某些原因(不是闲的慌)不得不自己编译一个内核时,会碰上kernel panic。 kernel panic很让人心烦,启动时的panic更让人烦,没有挂上硬盘,没有任何log的panic尤其让人烦。 提供几个解决问题的瞎搞方法: (以下内容针对于redhat系,但大部分方法是通用的) 判断引起panic的环节 简单描述下启动流程: 1 Power On Maybe Err:Worlds Collides 2 BIOS
前言: 前文《内存映射技术分析》描述了虚拟内存的管理、内存映射;《物理内存管理》介绍了物理内存管理。 本篇介绍一下内存回收。内存回收应该是整个Linux的内存管理上最难理解的部分了。 分析: 1,PFRA Page Frame Reclaim Algorithm,Linux的内存回收算法。 不过,PFRA和常规的算法不同。比如说冒泡排序或者快速排序具有固定的时间复杂度和空间复杂度,代码怎么写都差不多。而PFRA则不然,它不是一个具体的算法,而是一个策略---什么样的情况下需要做内存回收,什么样的page
本系列文章来自书籍<<100 Go Mistakes and How to Avoid Them>>. 该书总结了Go语言中常见的100个错误,分析了每个错误的场景并给出了最佳实践。
Linux内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽,内核会把该进程杀掉,监控是正常的。 防止重要的系统进程触发(OOM)机制而被杀死:可以设置参数/proc/PID/oom_adj为-17,临时关闭linux内核的OOM机制。
本文主要介绍kdump服务和crash的使用,并结合一个简单的实例演示如何分析内核奔溃的原因。本文基于linux kernel 4.19, 体系结构为aarch64。 kdump概述 kdump kdump 是一种先进的基于 kexec 的内核崩溃转储机制,用来捕获kernel crash(内核崩溃)的时候产生的crash dump。当内核产生错误时,kdump会将内存导出为vmcore保存到磁盘。 kdump流程 当系统崩溃时,kdump 使用 kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以
现在,我们的两块网卡都是在public区域中。下面我们来给public区域配置规则,让其允许某些服务被访问。
panic 究竟是啥?看似显而易见的问题,但是却回答不出个所以然来。奇伢分两个章节来彻底搞懂 panic 的知识:
之前把Go服务都迁到Kubernetes上后有些服务的某个 Pod总是时不时的重启一下,通过查业务日志根本查不到原因,我分析了一下肯定是哪里代码不严谨造成引用空指针导致Go发送运行时panic才会挂掉的,但是容器重启后之前输出到stderr的panic是会被清空的,所以才有了这篇文章里后面的分析和方案解决。
2)获取对应软件版本的符号表文件(如vmlinux),可以将该文件放置 crash工具同一目录下。
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.3" port protocol="tcp" port="1521" accept"
工作中,使用linux系统时,部署服务,排查问题,都离不开防火墙和端口的相关操作,比如怎么查看防火墙状态,端口占用怎么查看,以及如何开放一个端口等,今天同哥就把linux防火墙操作的命令做一个总结,希望对刚入门linux童鞋一点帮助。
# 允许更多的PIDs (减少滚动翻转问题); may break some programs 32768
1983年,理查德·斯托曼(Richard Stallman)在MIT人工智能实验室(AI Lab)创立了GNU计划,目标是创建一个完全自由的Unix类操作系统。在这个计划中,斯托曼和其他志愿者开发了GNU工具链(GCC、GDB、GNU Make等),但操作系统内核一直没有完成。
以往设备有问题了,是如何诊断的?我们是现场人员到现场,又是配合抓包,又是配合提供机器日志,效率极其低下。
虽然我主要使用C++,但是最近也想学点现代化的新语言。初步想的是从golang和Rust里先选一个。
golang 1.8 及以上版本提供了一个创建共享库(shared object)的新工具,称为 Plugins。目前 Plugins 仅在 Linux、FreeBSD 和 macOS 上受支持,且只支持 golang 调用。
在使用 Go 开发的后台服务中,对于错误处理,一直以来都有多种不同的方案,本文探讨并提出一种从服务内到服务外的错误传递、返回和回溯的完整方案,还请读者们一起讨论。
pstore文件系统(是的,这是个文件系统)是Persistent Storage的缩写,最早在2010年由 Tony Luck 设计并合入Linux主分支,设计的初衷是在内核Panic/Oops时能自动转存内核日志(log_buf),在Panic重启后,把转存的日志以文件形式呈现到用户空间以分析内核崩溃问题。
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
受到2022年“谷歌使用Rust重写Android系统且所有Rust代码的内存安全漏洞为零” [1] 的启发,最近笔者怀着浓厚的兴趣也顺应Rust 的潮流,尝试着将一款C语言开发的基础软件转化为 Rust 语言。本文的主要目的是通过记录此次转化过程中遇到的比较常见且有意思的问题以及解决此问题的方法与大家一起做相关的技术交流和讨论。
书接上回,胖虎前几天面试了一个“双休”的公司,但是他并不想去,他觉得他配不上这么优秀的公司,于是又开始了漫长的面试之路。
在 CentOs 7 中 firewalld,iptables,ebtables 这三种防火墙是共存的。 但是默认情况下使用 firewalld 来管理 netfilter 子系统。
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
上次在内核net_device设备框架的一个缺陷文章中,描述了当前内核net_device框架的一个缺陷。后来内核的net模块的负责人David提交了一个commit “net: Fix inconsistent teardown and release of private netdev state”。这个commit关键的一点,就是给已经很庞大的net_device结构新增一个布尔变量“needs_free_netdev”。这个变量用于在函数netdev_run_todo中,判断是否需要释放netdev。这个变量的赋值,一般是在驱动的setup回调函数中赋值为true。
在Go中,我们可以使用os/user包来获取Linux用户的ID和组ID。以下是一个简单的示例:
这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily
上篇文章我们讲述了如何定制Linux外围文件系统,本文我们来讲讲如何定制Linux内核。
Golang是静态编译型语言,在编译时就将所有引用的包(库)全部加载打包到最终的可执行程序(或库文件)中,因此并不能在运行时动态加载其他共享库。Go Plugin提供了这样一种方式,能够让你在运行时动态加载外部功能。go在1.8 支持了这个功能,类似c语言的动态链接库。
本文一是为了讨论在Linux系统出现问题时我们能够借助哪些工具去协助分析,二是讨论出现问题时大致的可能点以及思路,三是希望能给应用层开发团队介绍一些Linux内核机制从而选择更合适的使用策略。
out/host/linux-x86/bin/mkbootfs out/target/product//root | out/host/linux-x86/bin/minigzip > out/target/product//ramdisk.img 上述命令分两步进行: 1.out/host/linux-x86/bin/mkbootfs out/target/product/*/root 生成一个cpio文件,利用cpio 可将文件或目录从文件库获取出来或将散列文件拷贝到文件库。 2.out/host/linux-x86/bin/minigzip 将生成的cpio文件压缩成一个gzip格式的文件“out/target/product/*/ramdisk.img“
写这一篇文章的原因是最近在工作中有位小伙伴在写代码的时候直接用 Go 关键字起了一个 Goroutine,然后发生了空指针的问题,由于没有 recover 导致了整个程序宕掉的问题。代码类似这样:
上次我们写过了 Linux 启动详细流程,这次单独解析 start_kernel 函数。
Recovery of uncorrected recoverable(UCR) errors是MCA的一个增强特性,它针对部分硬件无法恢复的故障,提供软件隔离、恢复的机会。UCR errors表示硬件已检测到错误并发出信号通知到软件,软件执行了某些恢复操作(不会出现错误污染、扩散)后,系统可以继续运行。
在这众多大厂之中,微软对于 Rust 的重视与支持力度也一直未减。继 5 月效仿 Linux 用 Rust 重写部分 Windows 内核后,近来微软在拥抱 Rust 上又进了一步:微软在 GitHub 中发布了一系列开发工具包,让开发者可以使用 Rust 语言来编写 Windows 驱动程序。
本文以Linux3.14版本源码为例分析其启动流程。各版本启动代码略有不同,但核心流程与思想万变不离其宗。
容器的前世今生 容器是什么 从名字上就可以很明显的看出容器就是盛放东西的实体,比如盛放饮料的杯子☕️。 [杯具] 在计算机的世界里并没有饮料,计算机世界中只有资源,比如cpu、内存、磁盘等等,而容器的作用正是盛放我们的各种计算机资源。容器是从container翻译过来的,但是其实container的另一个翻译’集装箱‘可能更能符合语义。举个例子,汽车🚗(我们的程序)从天津港(开发环境)装进集装箱箱运输到新加坡港口(生产环境),中间不会损失任何零件,而汽车🚘运输到新加坡港后落地就可以直接启动。这就是容器化的第
领取专属 10元无门槛券
手把手带您无忧上云