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

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

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

    开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...

  2. 记一次Linux服务器因redis漏洞的挖矿病毒入侵

    中毒原因,redis bind 0.0.0.0 而且没有密码,和安全意识太薄弱. 所以,redis一定要设密码,改端口,不要用root用户启动,如果业务没有需要,不要bind 0.0.0.0!!!!! ...

  3. linux服务器被攻击处理过程

    开始排查 首先检查日志,以前做过安全运维,所以写过类似于检查命令和工具,开始一一排查. #查看是否为管理员增加或者修改 find / -type f -perm #显示文件中查看是否存在系统以外的文件 ...

  4. 记一次linux服务器入侵应急响应

    近日接到客户求助,他们收到托管电信机房的信息,通知检测到他们的一台服务器有对外发送攻击流量的行为.希望我们能协助排查问题. 一.确认安全事件 情况紧急,首先要确认安全事件的真实性.经过和服务器运维人员 ...

  5. 【转载】阿里云ECS Linux服务器禁止某些IP访问

    在阿里云ECS Linux服务器运维过程中,如果发现某些IP访问异常,如怀疑有攻击行为或者怀疑是别人写的爬虫程序长时间占用你的服务器资源,则可以通过相关的设置来禁止这些IP段的访问,拒绝这些IP的请求 ...

  6. Linux服务器记录并查询历史操作记录

    Linux服务器在使用过程中,经常会有除自己之外的其他人员使用.并不是每个人都对Linux服务器特别熟悉,难免会有一些操作导致服务器报错. 因此,监控Linux服务器的操作并记录下来,是非常有必要的! ...

  7. 记一次Linux系统被入侵的过程

    记一次Linux系统被入侵的过程 1. 前期现象 前期现象,宋组那边反应开发环境192.161.14.98这台机器通过公网下载文件,很慢,ping百度丢包严重.因为这台机器是通过楼下adsl拨号上网, ...

  8. linux 服务器更主板后无法识别网卡处理过程

    linux 服务器更主板后无法识别网卡处理过程   服务器故障报修,主板坏,更换主板后无法识别网卡,ifconfig 查看只显示:lo loopback 127.0.0.1. 系统加载网卡驱动后会去读 ...

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

    首先你要有一个完整的web应用的小Demo,一个简单的demo就可以了,但是要涉及到数据库,笔者这里简单的模拟一个登陆的过程. 在本地测试,访问项目: 键入账号密码,点击登陆: 就是这么个简单的动作, ...

随机推荐

  1. Java NIO中的读和写

    一.概述 读和写是I/O的基本过程.从一个通道中读取只需创建一个缓冲区,然后让通道将数据读到这个缓冲区.写入的过程是创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入操作. 二.从文件中读取 ...

  2. DataSet与DataTable对象

    DataSet与DataTable对象 摘自:http://www.cnblogs.com/fttbfttb/articles/1509662.html DataSet对象 DataSet是ADO.N ...

  3. Angularjs,WebAPI 搭建一个简易权限管理系统 —— 基本功能演示(二)

    目录 前言 Angularjs名词与概念 Angularjs 基本功能演示 系统业务与实现 WebAPI项目主体结构 Angularjs 前端主体结构 基本功能演示(二) 非常抱歉这个月实在太忙,一直 ...

  4. netty Failed to submit an exceptionCaught() event异常

    最近测试netty开发的服务端应用在关闭时,出现下列异常: ->###WARN#########nioEventLoopGroup-3-2###io.netty.util.internal.lo ...

  5. MySQL Cluster配置概述

    一.     MySQL Cluster概述 MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster .通过无共享体系结构,系统能够使用廉价的硬件,而 ...

  6. HTML · 图片热点,网页划区,拼接,表单

    图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. 网页划区: 在一个网页里,规划出一个区域用来展示另一个网页的内容. 网页的拼接: 在一个网络页面内,规划出多 ...

  7. Play Framework框架 JPA惯用注解

    Play Framework框架 JPA常用注解 1.@Entity(name=”EntityName”) 必须 ,name 为可选 , 对应数据库中一的个表 2.@Table(name=”" ...

  8. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q104-Q106)

    Question 104You plan to create a workflow that has the following three activities: CreateTask OnTask ...

  9. 第一节 SOA的基本概念和设计思想

    WCF一直很火,一直也没有时间来静下心来学习新的技术.不知不觉已经做程序八年了,其中的时间基本都费了,刚入门时很火热,后来慢慢热情被琐事取代.现在开始学习JAVA和WCF,学JAVA的原因就是想做手机 ...

  10. 【Android开发资料分享】自己整理的Android开发资料,非常全面

    学习Android以来,不知不觉中收集了大量非常优秀的Android开发资料,一直没有系统的整理,最近抽时间把收藏夹中的资料做了一下整理,现在分享给大家,希望能够帮助到需要的人.这份资料我还会不断的更 ...