记一次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_64Centos 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目录,就创建这个目录。然后再进行编译就不报错了。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号