记一次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的专家,如果我们能有这种的专家来帮我们定位问题,解决问题就好了,其实这种想法也有问题。我在看《宝莲灯前传》的时候,有句台词打动了我,如来收到了一个礼物,金菠萝花,如来拈花,迦叶一笑,如来说迦叶悟出了其中真谛,而金婵子不明所以,和迦叶争吵,玉帝说为何不直接讲明呢,菩萨说佛家道理重在一个悟字,只可意会不可言传。其实我们人类很多成长的过程就是只可意会不可言传,只有你自己经历了,你才能拥有真的本领,而不单单是接受别人灌输的二手知识。根据问题,思考探索的过程才能真正培养你的思维和能力,而不是直接接受别人的经验。而且人人都不愿意受这份探索的苦,就会变成人云亦云,不利于整个社会的和谐发展。
记一次linux服务器问题处理过程的更多相关文章
- 记一次Linux服务器上查杀木马经历
开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...
- 记一次Linux服务器因redis漏洞的挖矿病毒入侵
中毒原因,redis bind 0.0.0.0 而且没有密码,和安全意识太薄弱. 所以,redis一定要设密码,改端口,不要用root用户启动,如果业务没有需要,不要bind 0.0.0.0!!!!! ...
- linux服务器被攻击处理过程
开始排查 首先检查日志,以前做过安全运维,所以写过类似于检查命令和工具,开始一一排查. #查看是否为管理员增加或者修改 find / -type f -perm #显示文件中查看是否存在系统以外的文件 ...
- 记一次linux服务器入侵应急响应
近日接到客户求助,他们收到托管电信机房的信息,通知检测到他们的一台服务器有对外发送攻击流量的行为.希望我们能协助排查问题. 一.确认安全事件 情况紧急,首先要确认安全事件的真实性.经过和服务器运维人员 ...
- 【转载】阿里云ECS Linux服务器禁止某些IP访问
在阿里云ECS Linux服务器运维过程中,如果发现某些IP访问异常,如怀疑有攻击行为或者怀疑是别人写的爬虫程序长时间占用你的服务器资源,则可以通过相关的设置来禁止这些IP段的访问,拒绝这些IP的请求 ...
- Linux服务器记录并查询历史操作记录
Linux服务器在使用过程中,经常会有除自己之外的其他人员使用.并不是每个人都对Linux服务器特别熟悉,难免会有一些操作导致服务器报错. 因此,监控Linux服务器的操作并记录下来,是非常有必要的! ...
- 记一次Linux系统被入侵的过程
记一次Linux系统被入侵的过程 1. 前期现象 前期现象,宋组那边反应开发环境192.161.14.98这台机器通过公网下载文件,很慢,ping百度丢包严重.因为这台机器是通过楼下adsl拨号上网, ...
- linux 服务器更主板后无法识别网卡处理过程
linux 服务器更主板后无法识别网卡处理过程 服务器故障报修,主板坏,更换主板后无法识别网卡,ifconfig 查看只显示:lo loopback 127.0.0.1. 系统加载网卡驱动后会去读 ...
- 在linux服务器上发布web应用的完整过程
首先你要有一个完整的web应用的小Demo,一个简单的demo就可以了,但是要涉及到数据库,笔者这里简单的模拟一个登陆的过程. 在本地测试,访问项目: 键入账号密码,点击登陆: 就是这么个简单的动作, ...
随机推荐
- php Calender(日历)代码
代码如下: <?php /** * * 我的日历 * date_default_timezone_set date mktime * @param int $year * @param int ...
- 怎样在C#中从数据库中读取数据(数据读取器)
实现在C#中通过语句,查询数据库中的数据 SqlConnection con = null; //创建SqlConnection 的对象 try //try里面放可能出现错误的代码 ...
- CSS3动画基本的转换和过渡
理论知识不扎实,在一定程度上能体现你解决问题的能力.今天我们拿CSS3动画来说,简单回忆下他的一些基本属性,这些我们在平常应用中会经常用到. 常用动画属性: transform:translate(x ...
- Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll引用,导致项目无法调试问题
最近在做录音功能,用到了Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll两个dll,但是引入后,无法调试项目 具体解决方法: 修改app. ...
- Unity3D脚本语言UnityScript初探
译者注: Unity3D中支持三种语言:JavaScript.C#.Boo,很多人不知道如何选择,通过这篇译文,我们可以搞清楚这三者语言的来龙去脉,对选择主语言有一定的借鉴意义. 首先,Unity是基 ...
- NYOJ 21 三个水杯
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有 ...
- Rendering Problems: No Android SDK found. Please configure an Android SDK. 怎解决?
Rendering Problems No Android SDK found. Please configure an Android SDK.
- .net aes加密视频等文件
公司学习平台在app端下载下来的视频需要加密 随查找资料参考一些写法 写了aes的加密方法 记录防止忘记 using System; using System.Collections.Generic; ...
- Office版本差别引发的语法问题
由于没有源代码,今天反编译了一个基于.NET的dll类库,再次遇到office版本差异问题,所以把它记录下来. 在反编译时,需要Aspose.Cells 5.3.1(Aspose是一套.NET类库,其 ...
- Windows 下Apace tomcat
java JDK安装: 1. 官方www.oracle.com 下载jdk 2. 环境变量配置 (1)新建->变量名:JAVA_HOME变量值:C:\Program Files (x86)\Ja ...