• 记一次Linux服务器top命令us负载很高,但是找不到高负载进程,引起服务器频繁重启的错误,内核升级


    最近发现一台测试服务器频繁重启,各种排错找不到原因,
    服务器:CentOS6
    内核:2.6.32-431.1.2.0.1.el6.x86_64
    这里要注意了,引起服务器频繁重启的原因很有可能是内核引起的
    随后查找了目前为止有缺陷的内核版本,如下:

    Centos 6:

    2.6.32-220.el6.x86_64
    2.6.32-431.el6.x86_64
    2.6.32-71.el6.x86_64

    Centos 7:

    3.10.0-229.el7.x86_64
    这里说一下,内核升级一定要编译安装的方式升级,请勿使用yum。因为服务器在机房,做内核升级用yum,导致开机起不来的情况时有发生。

    问题:

    随后用top命令查看服务器负载不高,但是发现用户态占用cpu使用率非常高,16核cpu,经常12个都是100%,但是查看进程并没有cpu占用太高的进程,从右侧上方查看cpu负载也不是很高
    如图:
    这里写图片描述
    如果是内核态占用率高的话也就好怀疑是内核的问题了,但是内核态看起来一切正常。通过ps aux命令查看所有进程进行逐一排查,并停掉所有在使用的进程,并没有发现异常进程。用户态占用还是奇高。加上此内核在缺陷内核列表内,所以接下来进行内核升级。

    升级内核:

    官网现在最新稳定版kernel,截至2018.5.28最新稳定版本是4.16.11,因为服务器在国外,所以下载很慢,这里推荐多线程下载器 mwget 命令行多线程下载器,安装也很简单,因为服务器很不稳定,所以我加上了nohup进行后台下载,这里的mwget是指定几个线程同时下载。当然用wget下载也是可以的。mwget只是推荐。

    • 下载:
    nohup mwget -c0 -n 32 https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.11.tar.xz &

    然后解压内核:

    tar xJf linux-4.16.11.tar.xz -C /usr/src/kernel

    • 环境准备:

      yum yum groupinstall "Development Tools" -y

      yum -y install openldap openldap-clients openldap-developenldap-servers gcc gcc-c++ glibc automake autoconf libtool makelibmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpnglibpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-develglibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-develcurl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-developenssl openssl-devel hmaccalc  binutils-devel elfutils-libelf-devel bc

      • 编译安装内核:
        cd /usr/src/kernel/linux-4.16.11/
        因为已经有老内核,所以用老内核的配置文件,省事。复制老内核配置文件到当前目录下并改名为.config
        1. cp /boot/config-2.6.32-431.el6.x86_64 ./.config
        接下来本应该运行这个命令: make mrproper && make clean进行编译但是没安装的文件进行清空,因为我是刚解压过来的,所以就免了。直接下一步。
        2. make menuconfig
        用这个命令可以对内核模块进行定制,我只改个名其它没有修改。
        这里记录一下,这个命令是基于.config进行内核模块的修改。建议没什么特殊需求,直接用改个名字退出就行,退出的时候问你是否保存,当然要保存,也可以先save进行保存。
        3. make -j 16
        这里说一下,-j 就是指定几个cpu进行编译。我希望快点,所以用了所有cpu,当然 也可以用make all


      也不是绝对的,我升级了两个机器,虚拟机正常,但是实体机会报错。
      * Error during update of the configuration.
      make[2]: * [silentoldconfig] 错误 1
      make[1]: * [silentoldconfig] 错误 2
      SYSTBL arch/x86/include/generated/asm/syscalls_32.h
      SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
      SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
      SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
      make: * 没有规则可以创建“include/config/kernel.release”需要的目标“include/config/auto.conf”。 停止。
      make: * 正在等待未完成的任务….


      思路就是复制老内核的auto.conf给新内核使用。
      cp /usr/src/kernels/2.6.32-431.1.2.0.1.el6.x86_64/include/config/auto.conf /usr/src/kernel/linux-4.16.11/incloud/config/
      如果没有config目录,就创建这个目录。然后再进行编译就不报错了。

    4. make modules_install
    编译安装 .config给定的各种模块
    5. make install
    进行安装。然后等待安装完毕,如果安装成功,打开/etc/grub.conf。会显示有两个版本的内核,默认启动老内核,更改default默认值,从上往下依次从0开始,保存/etc/grub.conf并重启。

    [root@localhost ~]# uname -r
    4.16.11dongsi

    6.然后就是重启服务器
    大功告成,负载也下来了。服务器平稳运行:
    这里写图片描述
    下面这个问题好像全网都没解决办法,不少人也遇到了,再贴一下,为了帮助更多人
    * Error during update of the configuration.
    make[2]: * [silentoldconfig] 错误 1
    make[1]: * [silentoldconfig] 错误 2
    SYSTBL arch/x86/include/generated/asm/syscalls_32.h
    SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
    SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
    SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
    make: * 没有规则可以创建“include/config/kernel.release”需要的目标“include/config/auto.conf”。 停止。
    make: * 正在等待未完成的任务….

    思路就是复制老内核的auto.conf给新内核使用。
    cp /usr/src/kernels/2.6.32-431.1.2.0.1.el6.x86_64/include/config/auto.conf /usr/src/kernel/linux-4.16.11/incloud/config/
    如果没有config目录,就创建这个目录。然后再进行编译就不报错了。

  • 相关阅读:
    js 获取当前时间
    html5拨打电话及发短信
    ::before和::after伪元素的使用
    vue单页面应用刷新网页后vuex的state数据丢失问题以及beforeunload的兼容性
    CSS3径向渐变实现优惠券波浪造型
    iOS 幻灯片的自动循环滚动
    iOS 编译正常,但无法运行到真机和模拟器上,Choose a destination with a supported architecture in order to run on this device.
    iOS webView抓取改变js的alertView
    iOS 创建单例的方法
    webView图片点击可以实现预览效果
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10808468.html
Copyright © 2020-2023  润新知