本文是描述Linux virtual memory运行参数的第二篇,主要是讲OOM相关的参数的。为了理解OOM参数,第二章简单的描述什么是OOM。如果这个名词对你毫无压力,你可以直接进入第三章,这一章是描述具体的参数的,除了描述具体的参数,我们引用了一些具体的内核代码,本文的代码来自4.0内核,如果有兴趣,可以结合代码阅读,为了缩减篇幅,文章中的代码都是删减版本的。按照惯例,最后一章是参考文献,本文的参考文献都是来自linux内核的Documentation目录,该目录下有大量的文档可以参考,每一篇都值得细细品味。
最近很少用 deepin 在线或者使用客户段听音乐了,喜欢下载到本地听那些熟悉的歌曲。
当你面对一台新机器,出于某些原因(不是闲的慌)不得不自己编译一个内核时,会碰上kernel panic。 kernel panic很让人心烦,启动时的panic更让人烦,没有挂上硬盘,没有任何log的panic尤其让人烦。 提供几个解决问题的瞎搞方法: (以下内容针对于redhat系,但大部分方法是通用的) 判断引起panic的环节 简单描述下启动流程: 1 Power On Maybe Err:Worlds Collides 2 BIOS
前文《[linux][qemu]PVPanic的实现原理以及应用》中,介绍了pvpanic的原理和基本的使用方法,KVM虚拟化场景下,使用pvpanic驱动可以监控到Guest的panic。
在这篇文章中,我们将通过分析一个使用 Go 语言编写的示例程序来探讨 Go 语言在进行系统调用和进程替换方面的应用。该示例程序使用了 os 和 os/exec 标准库,以及 syscall 包来实现在 Unix 系统上的进程替换功能。本文将逐步解析这段代码,以揭示其背后的关键概念和技术细节。
Linux内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽,内核会把该进程杀掉,监控是正常的。 防止重要的系统进程触发(OOM)机制而被杀死:可以设置参数/proc/PID/oom_adj为-17,临时关闭linux内核的OOM机制。
廖威雄,就职于珠海全志科技股份有限公司,负责Linux IO全栈研发、性能优化、开源社区开发交流、Linux 内核开源社区pstore/blk,mtdpstore模块的作者、大客户存储技术支持、全志首个UBI存储方案主导人、全志首个RTOS NFTL主导人
本文主要分析Go语言的panic/recover在AMD64 Linux平台下的实现,包括:
一,softlockup: watchdog软狗/软锁----用于检测系统调度是否正常。 能响应中断,但调度异常。
Docker 是一种流行的容器化平台,它利用 Linux 内核中的 cgroups 和 namespaces 特性实现了轻量级的容器隔离。下面将详细介绍 Docker 的底层实现原理,并深入的看看探索其中使用到的三个系统调用与容器隔离的关系。
现在,我们的两块网卡都是在public区域中。下面我们来给public区域配置规则,让其允许某些服务被访问。
The OOM Killer 是内核中的一个进程,当系统出现严重内存不足时,它就会启用自己的算法去选择某一个进程并杀掉. 之所以会发生这种情况,是因为Linux内核在给某个进程分配内存时,会比进程申请的内存多分配一些. 这是为了保证进程在真正使用的时候有足够的内存,因为进程在申请内存后并不一定立即使用,当真正使用的时候,可能部分内存已经被回收了。
cgroups(Control Groups)是 Linux 内核中的一种特性,它可以将进程分组并限制它们对系统资源(如 CPU、内存、磁盘和网络)的使用。Docker 使用 cgroups 来实现容器的资源隔离和限制,例如限制容器可以使用的 CPU 核心数量和内存大小。
前言: 前文《内存映射技术分析》描述了虚拟内存的管理、内存映射;《物理内存管理》介绍了物理内存管理。 本篇介绍一下内存回收。内存回收应该是整个Linux的内存管理上最难理解的部分了。 分析: 1,PFRA Page Frame Reclaim Algorithm,Linux的内存回收算法。 不过,PFRA和常规的算法不同。比如说冒泡排序或者快速排序具有固定的时间复杂度和空间复杂度,代码怎么写都差不多。而PFRA则不然,它不是一个具体的算法,而是一个策略---什么样的情况下需要做内存回收,什么样的page
本系列文章来自书籍<<100 Go Mistakes and How to Avoid Them>>. 该书总结了Go语言中常见的100个错误,分析了每个错误的场景并给出了最佳实践。
工作中,使用linux系统时,部署服务,排查问题,都离不开防火墙和端口的相关操作,比如怎么查看防火墙状态,端口占用怎么查看,以及如何开放一个端口等,今天同哥就把linux防火墙操作的命令做一个总结,希望对刚入门linux童鞋一点帮助。
本文旨在介绍下几种常见的调试方法gdb、crash、kgdb and kdb 以及dynamic debug. 关于在 Linux 内核上使用debuggers,Linus Torvalds 长期以来对它们不太喜欢。简短地解释这种态度是,依赖调试器可能鼓励用权宜之计而非深思熟虑来解决问题,这会导致代码质量恶化。详细解释可以参考https://lwn.net/2000/0914/a/lt-debugger.php3
今天要探讨的是最近不知道为什么突然间火起来的面试题:当JAVA程序出现OOM之后,程序还能正常被访问吗?答案是可以的,很多时候他并不会直接导致程序崩溃,而是JVM会抛出一个error,告知你程序内存溢出了。当然也要分操作系统。
虽然我主要使用C++,但是最近也想学点现代化的新语言。初步想的是从golang和Rust里先选一个。
# 允许更多的PIDs (减少滚动翻转问题); may break some programs 32768
性能测试中,稳定性测试是必不可少的,最主要目的是为了发现程序崩溃问题,关键在测试设计过程中依据代码逻辑分析直接或间接使用的参数,构造各种异常case;例:
最近对一个golang的server项目做了性能测试,针对发现的问题做了简单的总结,供大家参考
情况是这样的,有一套测试数据库所在的主机在最近几个月,每个月都会重启一至两次,由于数据库配置了开机自启动,且每次重启时间都比较短暂,便没有得到重视。最近由于测试人员的反馈,每当主机重启后呢会导致大片的测试应用由于断连导致无法使用,每次都需要重启应用才会好。那么我们就需要介入认真排查一下问题所在了,恰巧最近一次的重启时间为 11 月 10 日 18:29 左右,需要针对此问题分析 os 重启原因。
这些参数主要是用来调整virtual memory子系统的行为以及数据的写出(从RAM到ROM)。 这些节点(参数)的默认值和初始化的过程大部分都可以在mm/swap.c中找到。 目前,/proc/sys/vm目录下有下面这些节点:
在虚拟化场景下,我们尽量会尝试使用带外监控的方式,来发现虚拟机的异常。pvpanic就是一种常见的方式,虚拟化场景的windows蓝屏检查也是基于如此。
pstore文件系统(是的,这是个文件系统)是Persistent Storage的缩写,最早在2010年由 Tony Luck 设计并合入Linux主分支,设计的初衷是在内核Panic/Oops时能自动转存内核日志(log_buf),在Panic重启后,把转存的日志以文件形式呈现到用户空间以分析内核崩溃问题。
Android OS由3层组成,最底层是Kernel,上面是Native bin/lib,最上层是Java层:
本文主要介绍kdump服务和crash的使用,并结合一个简单的实例演示如何分析内核奔溃的原因。本文基于linux kernel 4.19, 体系结构为aarch64。 kdump概述 kdump kdump 是一种先进的基于 kexec 的内核崩溃转储机制,用来捕获kernel crash(内核崩溃)的时候产生的crash dump。当内核产生错误时,kdump会将内存导出为vmcore保存到磁盘。 kdump流程 当系统崩溃时,kdump 使用 kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以
Linux操作系统在作为服务器的场景下应用最为广泛,但是在使用过程中也会遇到莫名崩溃的情况.这时我们就希望能对崩溃前一刻内存中的数据进行分析,从而找到崩溃的原因.本文将对整个过程所涉及到的技术做一个简单但是全面的介绍,包括:如何安装kdump,如何设置系统参数来捕获崩溃前的内存;如何使用crash做简单的分析;并且介绍如何使用更加简便的工具PyKdump来做crash文件的分析.通过了解这些知识, 可以帮助Linux运维人员更快更方便地排查问题.
上次我们写过了 Linux 启动详细流程,这次单独解析 start_kernel 函数。
Rust语言是一种高效、可靠的通用高级语言,同时兼顾了开发效率和执行效率。Rust除了能够胜任性能敏感的任务以外,也在内存和线程安全方面有着极高的可靠性。
默认Ubuntu 12.04没有配置内核崩溃自动重启及转存,造成发生内核崩溃的时候,没有core dump文件去分析,并且卡死在内核崩溃界面,为了方便查找内核崩溃原因,需要将内核崩溃自动重启配置及内核转存配置起来,配置步骤如下:
默认ubuntu12.04没有配置内核崩溃自动重启及转存,造成发生内核崩溃的时候,没有core dump文件去分析,并且卡死在内核崩溃界面,为了方便查找内核崩溃原因,需要将内核崩溃自动重启配置及内核转存配置起来,配置步骤如下:
Golang是静态编译型语言,在编译时就将所有引用的包(库)全部加载打包到最终的可执行程序(或库文件)中,因此并不能在运行时动态加载其他共享库。Go Plugin提供了这样一种方式,能够让你在运行时动态加载外部功能。go在1.8 支持了这个功能,类似c语言的动态链接库。
在 CentOs 7 中 firewalld,iptables,ebtables 这三种防火墙是共存的。 但是默认情况下使用 firewalld 来管理 netfilter 子系统。
[1] ES Configuration: https://www.elastic.co/guide/en/elasticsearch/reference/2.1/setup-configuration.html#vm-max-map-count [2] root cause kernel soft lockups · Issue #37853 · kubernetes/kubernetes (github.com): https://github.com/kubernetes/kubernetes/issues/37853 [3] service-node-port-range and ip_local_port_range collision · Issue #6342 · kubernetes/kops (github.com): https://github.com/kubernetes/kops/issues/6342 [4] Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com): https://github.com/kubernetes-retired/kube-deploy/issues/261 [5] Upgrading docker 1.13 on nodes causes outbound container traffic to stop working · Issue #40182 · kubernetes/kubernetes (github.com): https://github.com/kubernetes/kubernetes/issues/40182 [6] arp_cache: neighbor table overflow! · Issue #4533 · kubernetes/kops (github.com): https://github.com/kubernetes/kops/issues/4533
容器的前世今生 容器是什么 从名字上就可以很明显的看出容器就是盛放东西的实体,比如盛放饮料的杯子☕️。 [杯具] 在计算机的世界里并没有饮料,计算机世界中只有资源,比如cpu、内存、磁盘等等,而容器的作用正是盛放我们的各种计算机资源。容器是从container翻译过来的,但是其实container的另一个翻译’集装箱‘可能更能符合语义。举个例子,汽车🚗(我们的程序)从天津港(开发环境)装进集装箱箱运输到新加坡港口(生产环境),中间不会损失任何零件,而汽车🚘运输到新加坡港后落地就可以直接启动。这就是容器化的第
分析某些业务进程的 HTTPS 请求时,类似 tcpdump 和 Fiddler 等工具无法获得请求明文,不方便进行分析。本文探讨使用 BPF 解决 HTTPS 的可观测性问题。
1.概述 某年某月某日某项目的线上分布式文件系统服务器多台Linux系统kernel崩溃,严重影响了某项目对外提供服务的能力,在公司造成了不小影响。通过排查线上问题基本确定了是由于linux内核panic造成的原因,通过两个阶段的问题排查,基本上确定了linux内核panic的原因。排查问题的主要手段就是网上查找资料和根据内核错误日志分析并且构造条件重现。本文档就是对自己在整个问题排查过程中的总结。 2.第一阶段 因为刚出现问题的时候大家都比较紧急,每天加班都很晚,也制定了很多问题重现和定位原因的计划
这个版本主要是对 const fn 的提升: https://github.com/rust-lang/rust/pull/72437/
这个文档记录了用 kGDB 调试 Linux 内核的全过程,都是在前人工作基础上的一些总结。以下操作都是基于特定板子来进行,但是大部分都能应用于其他平台。
写这一篇文章的原因是最近在工作中有位小伙伴在写代码的时候直接用 Go 关键字起了一个 Goroutine,然后发生了空指针的问题,由于没有 recover 导致了整个程序宕掉的问题。代码类似这样:
系统启动的时候,按下‘e’键进入grub编辑界面,编辑grub菜单,选择“kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/vogroup00/logvol00 rhgb quiet” 一栏,按‘e’键进入编辑,在末尾增加enforcing=0,即: kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/vogroup00/logvol00 rhgb quiet enforcing=0 按‘b’键继续引导,OK顺利前进。
CentOS 7+系统下打开或者关闭firewalld防火墙命令与CentOS6是不同的,Linux百科网分享CentOS7下打开关闭firewalld防火墙与端口的命令方法:
转自Linux就该这么学 Centos7 更新后,默认防火墙由IPtables变为Firewalld,那么Firewalld配置端口的操作是怎么样的呢?让我们来学习一下吧! 1、基本操作 sys
本文介绍了Linux系统性能优化点常见的内核参数含义及其调优方式,以供学习参考。
上午查阅 Rust 官网内部博客,看到 Rust 1.51.0 stable 预发布版本已经开放测试。正式发布版本定于 UTC 标准时 2021-03-25,北京时间估计要到本周五。
IPC,WMI,SMB,PTH,PTK,PTT,SPN,WinRM,WinRS,RDP,Plink,DCOM,SSH,Exchange,LLMNR投毒,NTLM-Relay,Kerberos_TGS,GPO&DACL,域控提权漏洞,约束委派,数据库攻防,系统补丁下发执行,EDR定向下发执行等。
领取专属 10元无门槛券
手把手带您无忧上云