RHEL7系统管理之内核管理
1. Kdump工具
Kdump的工作机制是在内核崩溃时, 通过kexec 工具由BIOS启动一个备用内核, 由备用内核执行一系列任务,保存内存中崩溃内核的状态, 供后续故障分析用.
本文默认AMD或INTEL X86_64架构, RHEL7系统环境.
1.1 内核管理工具Kdump安装
Kdump是RHEL7中自带的内核管理工具.在RHEL7.1之前的版本,kdump作为安装完成之后的可选组件自动安装,从RHEL7.1开始kdump被植入安装界面,作为系统基础工具供安装选择.
可以通过下面命令直接RPM包安装.
yum -y install kexec-tools
rpm -q kexec-tools
同时,Kdump还配备了图形化管理工具,可以通过下面命令安装.
yum -y install system-config-kdump
对于RHEL7.4及之后的版本,kdump支持INTEL IOMMU. 而不支持RHEL7.3及之前的版本.
1.2 通过命令行配置kdump内存容量
kdump能监控系统内核运行状态,其地位比较特殊. kdump的内存空间是在系统启动时,由引导程序分配的,相对于系统内核,kdump内存是一个独立的空间.
可以通过如下命令指定kdump的内存空间大小.
crashkernel=128M #为kdump保留128M的内存空间.
crashkernel的值可以设置成“auto",在一些拥有较大内存的系统中,利于实现Kdump的自动化管理.
crashkernel=auto
当然,crashkernel的值还可以通过如下形式实现更灵活的配置.
crashkernel=<范围1>:<大小1>, <范围2>:<大小2>
crashkernel=512M-2G:64M,2G-:128M #当系统内存在512M-2G之间时,为Kdump保留64M的内存空间;当系统内存大于2G时,为Kdump保留128M的内存空间.
还可以这样:
crashkernel=128M@16M #为Kdump保留128M的内存空间,内存地址从16M(physical address 0x01000000)开始.
1.3 Kdump的存储
Kdump的配置在/etc/kdump.cnf中. kdump提供多种方式将捕获到内核崩溃数据本地保存或保存到远程主机.
#path /var/crash #kdump本地存储目录,默认是存放在/var/crash目录下,可以根据使用习惯设置.
path /usr/local/cores
...
#raw /dev/vg/lv_kdump #kdump可以直接写入移动介质.
raw /dev/sdb1
...
#nfs my.server.com:/export/tmp #kdump可以通过NFS保存到网络上其它存储设备中.
nfs test.example.com:/export/cores
...
#ssh user@my.server.com #kdump可以通过SSH传输协议,保存远程主机上.
#sshkey /root/.ssh/kdump_id_rsa
ssh user@test.example.com
sshkey /root/.ssh/mykey
kdump.conf中还可以在 core_collector makedumpfile 选项后加上" -c ", 使kdump文件能够被压缩,以节省存储空间.
core_collector makedumpfile -c
systemctl start kdump.service #启动Kdump服务
systemctl enable kdump.service #使Kdump开机自启
systemctl is-active kdump #检查Kdump是否已启动
active
echo > /proc/sys/kernel/sysrq #模拟内核崩溃,检查/var/crash/是否自动保存Kdump捕获的内核崩溃数据, 以确定Kdump是否正常工作
echo c > /proc/sysrq-trigger
需要注意的是
(1)在RHEL7之前的版本中,kdump的存储目录会随着kdump服务的启动而由系统自动创建. RHEL7中,如果改变了kdump的存储目录,则必须在启动kdump服务之前,手动创建kdump的存储目录,否则kdump服务会启动失败.
(2)如果在安装界面禁用了kdump, 而安装完成之后再通过systemctl start kdump启动kdump, 会报内存不足无法启动的错误. kdump的内存空间是在内核加载之前由boot分配的, 所以必须修改boot. 最好使用kdump的图形管理工具 system-config-kdump 加载kdump的默认配置, 使kdump处于可用状态, 然后重启系统, systemctl status kdump 服务处于激活状态(active).
1.4 利用crash功能分析内核崩溃
利用crash功能组件能够分析linux内核崩溃时的网络、磁盘、CPU、系统内核状态,快速定位故障点.
crash组件可以通过RPM包安装.
sudo yum -y install crash #安装crash
sudo debuginfo-install kernel #安装内核调试模块
sudo crash /usr/lib/debug/lib/modules/<kernel>/vmlinux /var/crash/<timestamp>/vmcore #启动crash调试
测试一下:


crash基本调试命令:
crash>log #崩溃时日志记录
crash>bt #崩溃时的堆栈信息
crash>vm #崩溃时的内存状态
crash>ps #崩溃时的进程状态
crash>files #崩溃时的打开的文件
crash>exit #退出crash
2 linux内核调校
2.1 kernel的调校途径
RHEL7中提供三种内核调校方法:
(1)使用sysctl 命令;
(2)修改/etc/sysctl.d/ 目录下的内核配置文件;
(3)通过shell 在/proc/sys 目录下挂载虚拟文件系统;
2.2 sysctl命令可以列出、读取、设置内核参数, 还可以将参数设置为临时或永久.
sysctl -a #列出所有可调校的项
sysctl kernel.version #列出kernel的版本信息 sysctl <tunable class>.<tunable>=<value> #使调校参数临时生效
sysctl -W <tunable class>.<tunable>=<value> #使调校参数永久生效
2.3 修改/etc/sysctl.d/99-sysctl.conf 目录下的99-sysctl.conf文件
cp /etc/sysctl.d/-sysctl.conf /etc/sysctl.d/-sysctl.conf.bak #备份系统默认的内核参数文件
vim /etc/sysctl.d/-my.conf #创建新的内核参数文件 ...
<tunable class>.<tunable> = <value> #写入要调校的参数类和值
<tunable class>.<tunable> = <value>
...
save #保存文件
reboot\ sysctl -p /etc/sysctl.d/-my.conf #重启系统或者使用sysctl -p 命令载入新的内核参数配置
2.4 sysctl 调校内核参数
(1)调整最大请求的aio数量.
sysctl -a | grep fs.aio #查看内核默认的最大aio值
sysctl fs.aio-max-nr=2048576 #临时调整aio最大值

(2)开启本地ipv4转发功能.
sysctl net.ipv4.ip_forward =
(3)设定进程能被分配到的最大内存空间.
sysctl vm.max_map_count =
(4)设定系统中同时运行的最大进程数.
sysctl kernel.threads-max =
在root权限下,通过sysctl 命令的内核参数调校, 基本上能直接控制linux 的内核所有行为, 满足实际生产中的绝大多数需求.
RHEL7系统管理之内核管理的更多相关文章
- Linux 0.12 内核管理存储器
Linux 0.12 内核管理存储器 其分段,用分段的机制把进程间的虚拟地址分隔开. 每一个进程都有一张段表LDT.整个系统有一张GDT表.且整个系统仅仅有一个总页表. 其地址翻译过程为: 程序中给出 ...
- Linux 系统管理04--账号管理
Linux系统管理04--账号管理 一.用户账号管理 1.用户账号概述 (1)用户账号的常见分类: 1>超级用户:root uid=0 gid=0 权限最大. 2>普通用户:uid> ...
- Linux 系统管理06--磁盘管理
Linux系统管理06——磁盘管理 一.磁盘结构 1.硬盘的物理结构 盘片:硬盘有多个盘片,每个盘片2面 磁头:每面一个磁头 2.硬盘的数据结构 扇区:盘片被分为多个扇形区域,每个扇形区存放512字节 ...
- 【Linux学习】Linux系统管理1—进程管理
Linux系统管理1-进程管理 一.Linux的三种进程 Linux包括3中不同类型的进程: 交互进程:由一个shell启动的进程.交互进程可以在前后台运行 批处理进程:该进程和终端无联系,是一个进程 ...
- linux基础—课堂随笔010_系统启动和内核管理
系统启动和内核管理 Linux: kernel+rootfs kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs:程序和glibc 库:函数集合, functio ...
- Linux内核管理子系统和进程管理子系统
内核管理子系统职能:1.管理虚拟地址与物理地址的映射 2.物理内存的分配 程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体. 进程:是一个执行中的程序,它是动态的实体 进程四要素: ...
- FrameWork内核解析之XMS内核管理(一)上篇
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680本篇文章将继续从以下两个内容来介绍XMS内核管理之AMS: [Activi ...
- Linux基本命令——系统管理和磁盘管理
转: Linux基本命令--系统管理和磁盘管理 Linux命令--系统管理和磁盘管理 一.系统管理 1.1 时间相关指令 <1> 查看当前日历: cal <2> 显示或设置时间 ...
- RHEL7系统管理常用工具
RHEL7提供大量系统管理工具,简要记录一下各工具的作用,后续再详细说明用法. 工具 描述 /proc linux的内存镜像目录./proc/sys目录下的文件能被临时修改,从而改变linux内核参数 ...
随机推荐
- 国内maven仓库地址资源汇总
国内maven仓库地址:阿里云maven仓库,网易163maven仓库,以及其他maven仓库地址. 国内下载maven一般速度都很慢,下载需要很久时间.这里汇总了一些国内的镜像资源 附带pom文件中 ...
- linux 权限详解
转载自博客园: http://www.cnblogs.com/123-/p/4189072.html 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所 ...
- C语言----<另类>神奇的"Hello World!"
先上代码 #include <iostream> using namespace std; void a() { printf("Hello World!"); } v ...
- win10 uwp 商业游戏
本文告诉大家去做一个商业游戏,游戏很简单,几乎没有什么技术 游戏的开始,需要添加框架库,于是引用我自己写的库. 首先是创建一个启动页面,这个页面是显示启动的. 在显示启动的时候,是需要加载游戏需要使用 ...
- Java基础教程(22)--异常
一.什么是异常 异常就是发生在程序的执行期间,破坏程序指令的正常流程的事件.当方法中出现错误时,该方法会创建一个对象并将其交给运行时系统.该对象称为异常对象,它包含有关错误的信息,包括错误的类型和 ...
- Java基础教程(20)--数字和字符串
一.数字 在用到数字时,大多数情况下我们都会使用基本数据类型.例如: int i = 500; float gpa = 3.65f; byte mask = 0xff; 然而,有时候我们既需要 ...
- 关于Java中语句符号及格式的理解
关于Java中语句符号及格式的理解 这篇文章是撰写的第一篇文章,在此作一下博主是一名在读的工科研究生,种种原因,研二开始决定转行从事程序员工作.开始的自学之路并不算非常顺畅,也走了一点弯路,但一直都坚 ...
- Springboot集成SpringData JPA
序 StringData JPA 是微服务框架下一款ORM框架,在微服务体系架构下,数据持久化框架,主要为SpringData JPA及Mybatis两种,这两者的具体比较,本文不做阐述,本文只简单阐 ...
- OracleServer总结进阶之系统分析(进阶完结)
个人原创,转载请在文章头部明显位置注明出处:https://www.cnblogs.com/sunshine5683/p/10080102.html 在上一篇进阶中大概讲解了一些关于进阶方面的知识,今 ...
- idea 中如何生成类图
前言:记录一下 idea 中如何生成类图,毕竟类图在开发或看源码时用得特别多. 推荐博客:https://blog.csdn.net/zhangle1hao/article/details/78804 ...