记一次linux服务器问题处理过程

本周二的时候,涛哥找我,说明了一件事,在安装ganglia的时候,发生的一个问题。

在一台suse 10 sp1的服务器上,安装ganglia的一个依赖包,libconfuse.rpm,安装完成之后,

执行任何命令都会出现段错误的提示,而且无法再次ssh登录,也无法直接console登录。

ssh登录,提示握手的时候错误,console登录提示init失败,请等等五分钟。

根据所有这些提示找到的解决方案都不适用于我们的情况。

其实在这个时候,涛哥给我讲了一件事,说前两天也发生过类似的事情,说是库连接指向的问题,当时我没有对这个事情引起足够重视,最后发现问题和以前的原因是一样的。

当时涛哥在安装软件的时候,有提示说libc.2.4太旧,所以他就下载了一个新的suse libc.2.11.1.so上传上来,删除了旧的链接,删除之后就发现有问题了,直接断开,之后他用

系统盘进入救援模式,然后进去后fdisk -l找到系统盘,把系统盘加载到/mnt,然后进去/lib64,把libc重新链接回2.4,重启问题解决。

但事情并没有结束,他没有把自己上传的libc.2.11.1.so删除,还是留在那个地方了。

而这次他安装libconfuse.rpm之后,问题再现了 。

warning: libconfuse-2.6-10.1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 4f38b5aa

Preparing... ########################################### [100%]

1:libconfuse ########################################### [100%]

Updating dynamic linker cache...

/sbin/ldconfig: /usr/local/lib/libncursesw.so.6 is not a symbolic link

/sbin/ldconfig: /usr/local/lib/libncursesw.so.5 is not a symbolic link

/sbin/ldconfig: /usr/local/lib/libncurses.so.6 is not a symbolic link

/sbin/ldconfig: /usr/local/lib/libncurses.so.5 is not a symbolic link

/sbin/ldconfig: /usr/local/lib/l

rpm -qp --scripts libconfuse-2.6-10.1.x86_64.rpm

postinstall script (through /bin/sh):

echo Updating dynamic linker cache...

/sbin/ldconfig

postuninstall script (through /bin/sh):

echo Updating dynamic linker cache...

/sbin/ldconfig

核心就是在这一步ldconfig命令起的作用,我查询了ldconfig,它就是起一个创建共享库的缓存文件的作用,加速以后对共享库的调用,类似的还有一个prelink的命令,可以事先对命令和共享库进行连接,提高执行速度。

但是没想到的是,ldconfig居然改变了软链的指向,如果他发现了更新的so文件,居然直接把指向改成了最新的so,这个时候,如果你新的so文件有问题,譬如我们的后来发现是suse11适配的so,不适于suse10sp1。你的系统就会崩溃了。

libc是一个很重要的库文件,很多命令都直接调用它,你想一下,linux命令是基于c开发的,libc又是最基本的c函数库,它出问题了,很多命令就会报segment fault的错误。

在没有找到根本原因,不能有十足的把握解决这个问题之前,我们不敢重启服务器,因为重启了就可能无法启动,就会影响上面执行的业务。这也给了我很大的启迪,不要以为重启就能解决问题,千万千万不能贸然重启机器,因为有时候重启之后业务根本就启不来了,甚至系统都启不来,必须找到事情发生的根本原因,最好是能够自己重现。

抱着重现的想法,我们下载了suse 10的介质,自己在虚拟机上安装系统,然后再次安装了libconfuse.rpm,没有发现任何问题,我们也rpm-ql libconf查看安装的文件,没有什么,就在lib64/下面一个so文件,一个软链而已,不应该造成那样的影响,可能就是ldconfig执行的时候,原来隐藏的问题被激活了。

我们根据报的错误搜索谷歌,但没有发现有用的解决方案,这给我们的启迪是,虽然他们遇到的问题也是这样,有了自己的解决方案,但是我们搜索的关键词是问题反映的表象,极有可能每一个人的环境不一样,上下文件不一样,但是最后发生问题的表象是一样的,可能引起这种表象的根本原因是数种,我们直接照搬,不考虑上下文件 和背景,那不仅不起作用,而且是不负责任的。必须要结合自己的背景上下文件情况,找到问题发生的根本原因,然后重现,再去搜索关键词,才能解决问题。

幸运的是当时这台机器上运行的ftp服务进程还可以用,我们ftp上去,对lib下面的文件进行排查,发现正常的机器和不正常的机器的一些区别,就是上面我们说的,出问题的机器上,libc.so.6.居然又指向了libc.2.11.1,而不是正常的2.4.so.

我们在虚拟机上重现了这个问题,症状一模一样,我们找到了根本原因。

还有一个启迪是,当时我有一个想法,就是我对linux的认识不到位,不能很好地定位问题,身边也没有很熟悉linux的专家,如果我们能有这种的专家来帮我们定位问题,解决问题就好了,其实这种想法也有问题。我在看《宝莲灯前传》的时候,有句台词打动了我,如来收到了一个礼物,金菠萝花,如来拈花,迦叶一笑,如来说迦叶悟出了其中真谛,而金婵子不明所以,和迦叶争吵,玉帝说为何不直接讲明呢,菩萨说佛家道理重在一个悟字,只可意会不可言传。其实我们人类很多成长的过程就是只可意会不可言传,只有你自己经历了,你才能拥有真的本领,而不单单是接受别人灌输的二手知识。根据问题,思考探索的过程才能真正培养你的思维和能力,而不是直接接受别人的经验。而且人人都不愿意受这份探索的苦,就会变成人云亦云,不利于整个社会的和谐发展。

时间: 2024-10-25 05:07:57

记一次linux服务器问题处理过程的相关文章

记一次Linux服务器上查杀木马经历

开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称 Linux是最安全的操作系统,导致很多人对Linux的安全性有个误解:以为它永远不会感染病毒.木马:以为它没有安全漏洞.所以很多Linux服务器 都是裸奔的.其实在这次事件之前,我对Linux的安全性方面的认识.重视程度也是有所不足的.系统的安全性是相对而言的,没有绝对的安全,风险无处不 在. 案例描述 我 们在云端(中信国际电讯CPC)的一台Li

记一次Linux服务器被入侵后的检测过程

作者 | 哈兹本德     来源 | FreeBuf 0×00 前言 故事是这样的,大年初一,客户反应他们服务器无法访问,查看路由,发现某oracle+tomcat服务器UDP流量超大,把带宽占完了,过年嘛,客户那边先找了当地的技术人员弄了几天没搞定,然后没办法大年初三的找我们弄-顾客是上帝! 其实吧以前也遇到过这类攻击,当时某IDC都被打瘫了,只不过马儿不在我们的设备上,所以没过多关注- 0×01 查找木马 首先SSH登陆,top查看进程,发现奇怪名字的命令gejfhzthbp,一看就感觉有问

记一次linux服务器被挂马的处理过程

有断时间突然发现zimbra邮件服务器过几天就卡死,得重启才能恢复,卡的时候根本用不了命令,按服务器关机键都没办法关机,只能强制重启.连续观察好几天,通过sar -f /var/log/sarxx查看日志发现,CPU使用率隔一阵子就会390%或者更多,但是这个sar只能查看系统层面的,没法查看是哪个进程使用率偏高.后面去网上下载了atop,这个程序可以查看得更详细,包括历史进程使用情况,安装后也一直没有查看到异常. 连续再观察几天后,突然有一天被我观察出来了,当CPU高的时候使用top命令查看有

linux服务器被攻击处理过程

开始排查 首先检查日志,以前做过安全运维,所以写过类似于检查命令和工具,开始一一排查. #查看是否为管理员增加或者修改 find / -type f -perm 4000 #显示文件中查看是否存在系统以外的文件 rpm -Vf /bin/ls rpm -Vf /usr/sbin/sshd rpm -Vf /sbin/ifconfig rpm -Vf /usr/sbin/lsof #检查系统是否有elf文件被替换 #在web目录下运行 grep -r "getRuntime" ./ #查

记一台web服务器被***处理过程

某天收到电信网监的邮件通知,内容是我们一个网站被***,有个链接显示"×××"信息.命令立即修复.解决过程:1.查看服务器,发现服务器根目录下多出show1.php,show2,php.info.php三个文件,内容相同.内容如下:<?phpset_time_limit(0);$url1 = $_SERVER['PHP_SELF']; $name= substr($url1 ,strrpos($url1 ,'/')+1 );chmod($name,0444);header(&qu

linux服务器中毒排查过程

真实案例:公司一台线上redis服务器前段时间在空闲状态下cpu也一直处于100%的状态,在查看对应进程的CPU后,发现一个奇怪的问题,平均CPU使用率远远大于redis进程.其它两个进程的所占用的CPU总和,但是top命令查看不到对应的占用过高的进程,于是初步怀疑有两种可能:1.硬件问题 2.服务器受到***CPU病毒的***排查思路:1.因为是最新购买的云服务器,基本排除硬件问题(腾讯云监控会有报警)2.确定是病毒惹的祸:2.1:查看定时任务,发现有来历不明的定时任务在跑,里面的内容都是乱码

在linux服务器上发布web应用的完整过程

首先你要有一个完整的web应用的小Demo,一个简单的demo就可以了,但是要涉及到数据库,笔者这里简单的模拟一个登陆的过程. 在本地测试,访问项目: 键入账号密码,点击登陆: 就是这么个简单的动作,下面把它部署到linux服务器上,在linux服务器上需要安装jdk(1.8).tomcat8.mysql.这里先用本机的虚拟机里的linux做模拟,后边再部署到真正的服务器上,这里使用的linux是CentOS6.使用Xshell连接安装好的linux系统,点击Xftp工具,将所需的安装包上传到服

Linux服务器LVM逻辑卷配置过程

Linux服务器LVM逻辑卷配置过程 通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM),用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘,也可以提高I/O操作的性能,以及提供冗余保护,它的快照功能允许用户对逻辑卷进行实时的备份.对一般用户来讲,使用最多的是动态调整文件系统大小的功能.这样,你在分区时就不必为如何设置分区的大小而烦恼,只要在硬盘中预留出部分空闲空间,然后根据系统的使用情况,动态调整分区大小.以下为在VMware

linux服务器启动过程

随着Linux的应用日益广泛,特别是在网络应用方面,有大量的网络服务器使用Linux操作系统.由于Linux的桌面应用和Windows相比还有一 定的差距,所以在企业应用中往往是Linux和Windows操作系统共存形成异构网络.在服务器端大多使用Linux和Unix的,目前Linux的擅 长应用领域是单一应用的基础服务器应用,譬如DNS和DHCP服务器.Web服务器.目录服务器.防火墙.文件和打印服务器.Intranet代理服务器 .启动 Linux 系统的过程包括很多阶段.不管您是引导一个标