您的位置:澳门402永利com > 操作系统 > RHEL7系统管理之内核管理

RHEL7系统管理之内核管理

发布时间:2019-11-12 08:56编辑:操作系统浏览(126)

    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 1 > /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调试

    测试一下:

    图片 1

    图片 2

    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/99-sysctl.conf /etc/sysctl.d/99-sysctl.conf.bak    #备份系统默认的内核参数文件
    vim /etc/sysctl.d/99-my.conf    #创建新的内核参数文件
    
    ...
    <tunable class>.<tunable> = <value>   #写入要调校的参数类和值
     <tunable class>.<tunable> = <value>
    ...
    save    #保存文件
    reboot sysctl -p /etc/sysctl.d/99-my.conf  #重启系统或者使用sysctl -p 命令载入新的内核参数配置
    

    2.4 sysctl 调校内核参数

    (1)调整最大请求的aio数量.

    sysctl -a | grep fs.aio    #查看内核默认的最大aio值
    sysctl fs.aio-max-nr=2048576  #临时调整aio最大值
    

    图片 3

    (2)开启本地ipv4转发功能.

    sysctl net.ipv4.ip_forward = 1
    

    (3)设定进程能被分配到的最大内存空间.

    sysctl vm.max_map_count = 65530
    

    (4)设定系统中同时运行的最大进程数.

    sysctl kernel.threads-max = 16161
    

      在root权限下,通过sysctl 命令的内核参数调校, 基本上能直接控制linux 的内核所有行为, 满足实际生产中的绝大多数需求.

      

    本文由澳门402永利com发布于操作系统,转载请注明出处:RHEL7系统管理之内核管理

    关键词:

上一篇:没有了

下一篇:没有了