服务器进程异常的原因分析(第二篇)

简介: 最近看到一个报警,是显示某一个oracle的备库进程数达到了2000多个。ZABBIX-监控系统: ------------------------------------报警内容: Too many OS processes on ora_xxx@10.
最近看到一个报警,是显示某一个oracle的备库进程数达到了2000多个。
ZABBIX-监控系统 :

------------------------------------
报警内容: Too many OS processes on ora_xxx@10.127.13.123
------------------------------------
报警级别: PROBLEM
------------------------------------
监控项目: Number of processes2003
------------------------------------
报警时间:2015.12.13-00:10:12

对于这个问题可以这么理解,这台服务器上只有一个Oracle备库实例,而且这个备库的业务量也其实不大,不到一百个。而现在进程有2000多个,哪里会消费这么多的进程资源呢,一个设想就是一些额外的系统级脚本运行导致,当然这个也是有前车之鉴。可以参考 服务器进程异常的原因分析 http://blog.itpub.net/23718752/viewspace-1812698/
但是问题也不总是一个模子里刻出来的,问题的原因也是千变万化。
对于这个问题,也是带着一丝的侥幸,首先登陆到服务器端。发现了下面的服务器情况。
top - 22:44:23 up 829 days,  1:35,  3 users,  load average: 0.00, 0.03, 0.00
Tasks: 2075 total,   1 running, 1889 sleeping,   0 stopped, 185 zombie
Cpu(s):  0.1% us,  0.1% sy,  0.0% ni, 99.1% id,  0.7% wa,  0.0% hi,  0.0% si
Mem:  16425208k total, 16371888k used,    53320k free,   389780k buffers
Swap:  8385920k total,   449736k used,  7936184k free, 12533064k cached
目前的服务器进程有2000多个,而且io等待也不高。1889个在sleep,185个僵尸进程,所以还是有什么特别的问题。
大概翻了几页进程信息,就发现CROND和一个sh运行脚本的进程有很多。
#  ps -ef|grep -i CROND|wc -l
449
# ps -ef|grep sh |wc -l
723
所以通过这些也能够大概看出来,应该是一个crontab的job相关的问题。
看一看磁盘的使用情况,df -h看看发现会卡住没有反应,那么问题似乎就是这儿了。
怎么知道df -h的时候命令卡在哪里呢? 可以简单使用strace测试一下。
#strace df -h
statfs("/tmp", {f_type=0x1021994, f_bsize=4096, f_blocks=2053151, f_bfree=1992224, f_bavail=1992224, f_files=2053151, f_ffree=2052612, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
write(1, "/dev/shm              7.9G  238M"..., 49/dev/shm              7.9G  238M  7.6G   3% /tmp
) = 49
statfs("/proc/sys/fs/binfmt_misc", {f_type=0x42494e4d, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs("/var/lib/nfs/rpc_pipefs", {f_type=0x67596969, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs("/home/oracle/backup_stage",  <unfinished ...>
可以发现运行的结果可以看出来,最后是卡在了/home/oracle/backup_stage这一步上了。如果是明眼人可能已经猜出来缘由了。
看一下挂载点的信息:
[@actvnew.cyou.com oracle]# mount
/dev/sda1 on / type ext3 (rw)
。。。
/dev/shm on /tmp type none (rw,bind)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
10.11.148.174:/backup/10.127.xxxx.xxx_xxxx on /home/oracle/backup_stage type nfs (rw,bg,hard,intr,nolock,tcp,rsize=32768,wsize=32768,addr=10.11.148.174)
可以看到这个路径其实是使用了nfs的方式挂载的。
但是查看/etc/fstab的时候,发现已经注释了原来的挂载点信息
$ cat /etc/fstab
。。。
/dev/shm                /tmp                    none    rw,bind         0 0
#10.11.148.174:/backup/10.127.xxxx.xxxx_xxxx /home/oracle/backup_stage nfs rw,bg,soft,intr,nolock,tcp,rsize=32768,wsize=32768 0 0
从这个信息可以看似,之前的维护人员似乎意识到了这个挂载点失效了,直接给注释了。
但是实际上呢。查看/etc/mtab发现这个配置还在那里。
$ cat /etc/mtab
/dev/sda1 / ext3 rw 0 0
...
10.11.148.174:/backup/10.127.xxxx.xxx_xxx /home/oracle/backup_stage nfs rw,bg,hard,intr,nolock,tcp,rsize=32768,wsize=32768,addr=10.11.148.174 0 0
所以可以基本明确,这个是由nfs失效导致的一个问题。那么我们直接取消挂载好了。
# umount -f /home/oracle/backup_stage
umount2: Device or resource busy
umount: /home/oracle/backup_stage: device is busy
umount2: Device or resource busy
umount: /home/oracle/backup_stage: device is busy
强制也不行。
#umount -f /home/oracle/backup_stage
umount2: Device or resource busy
umount: /home/oracle/backup_stage: device is busy
而且进一步发现到了/home/oracle目录下,使用ls -l也会直接卡住。当然strace一下,发现还是由于这个/home/oracle/backup_stage导致的问题。
所以可以先初步解决问题,循序渐进,把问题的影响先降下来再除根。
所以清理了部分的进程情况,发现还有相当一部分的进程是由于rman相关的两个脚本导致的。而在这两个脚本中间接使用ll和mkdir -p的操作。
oracle     359   337  0  2015 ?        00:00:00 /bin/bash /home/oracle/dbadmin/scripts/rmanbak_stby.sh
oracle     577   575  0  2015 ?        00:00:00 /bin/sh -c . $HOME/.actvdbprofile;$HOME/dbadmin/scripts/rmanbak_stby.sh
对于NFS挂载点失效的情况下,简直就是灾难。所以简单使用awk命令生成批量的命令来清理
比如删除僵尸进程,可以采用下面的方式
# ps -ef|grep "defunct"|awk '{print "kill -9 " $2}'> kill_defunct.lst
清理之后,进程数马上降了下来。效果还是非常显著的。

然后进一步处理。关键就是使用fuser来清理相关的进程
# umount /home/oracle/backup_stage
umount: /home/oracle/backup_stage: device is busy
# umount -l /home/oracle/backup_stage
# umount -lf /home/oracle/backup_stage
umount: /home/oracle/backup_stage: not mounted
# fuser -k /home/oracle/backup_stage
# umount /home/oracle/backup_stage
umount: /home/oracle/backup_stage: not mounted
再次查看这个问题就基本解决了。
df -h和ls -l都没有问题了,当然后续还需要查看crontab中对于这个路径的引用,还是需要考虑重新制定或者重新建立新的nfs映射。


目录
相关文章
|
7月前
|
存储 弹性计算 缓存
阿里云服务器ECS经济型、通用算力、计算型、通用和内存型选购指南及使用场景分析
本文详细解析阿里云ECS服务器的经济型、通用算力型、计算型、通用型和内存型实例的区别及适用场景,涵盖性能特点、配置比例与实际应用,助你根据业务需求精准选型,提升资源利用率并降低成本。
505 3
|
7月前
|
数据挖掘
服务器数据恢复——服务器异常断电造成raid5阵列故障的数据恢复案例
某服务器上有一组由12块硬盘组建的raid5磁盘阵列。 机房供电不稳定导致机房中该服务器非正常断电,重启服务器后管理员发现服务器无法正常使用。 意外断电可能会导致服务器上的raid模块损坏。
|
3月前
|
域名解析 运维 监控
如何检测服务器是否被入侵?解析5大异常指标
本文系统介绍了服务器入侵的五大检测维度:硬件资源、网络流量、系统日志、文件完整性及综合防护。涵盖CPU、内存异常,可疑外联与隐蔽通信,登录行为审计,关键文件篡改识别等内容,并提供实用工具与防护建议,助力运维人员快速发现潜在威胁,提升系统安全防御能力。转载链接:https://www.ffy.com/latest-news/1916688607247077376
322 0
如何检测服务器是否被入侵?解析5大异常指标
|
5月前
|
存储 弹性计算 运维
阿里云服务器全解析:ECS是什么、应用场景、租用流程及优缺点分析
阿里云ECS(Elastic Compute Service)是阿里云提供的高性能、高可用的云计算服务,支持弹性扩展、多样化实例类型和多种计费模式。适用于网站搭建、数据处理、运维测试等多种场景,具备分钟级交付、安全可靠、成本低、易运维等优势,是企业及开发者上云的理想选择。
848 5
|
6月前
|
运维 安全 算法
服务器 CPU 占用忽高忽低?排查这 6 个隐藏进程,90% 的异常都能解决
服务器运维中,CPU占用忽高忽低常由隐藏进程引发,影响服务稳定性。本文介绍六大需排查的隐藏进程:异常编译、挖矿程序、内存泄漏、网络请求异常、日志轮转问题及恶意软件。通过排查工具如top、ps、netstat等定位问题进程,并提供针对性解决方法,帮助开发者快速稳定服务器性能。
1582 0
|
6月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
9月前
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
692 28
|
9月前
|
存储 人工智能 项目管理
2025年GitHub平台上的十大开源MCP服务器汇总分析
本文深入解析了GitHub上十个代表性MCP(Model Context Protocol)服务器项目,探讨其在连接AI与现实世界中的关键作用。这些服务器实现了AI模型与应用程序、数据库、云存储、项目管理等工具的无缝交互,扩展了AI的应用边界。文中涵盖Airbnb、Supabase、AWS-S3、Kubernetes等领域的MCP实现方案,展示了AI在旅行规划、数据处理、云存储、容器编排等场景中的深度应用。未来,MCP技术将向标准化、安全性及行业定制化方向发展,为AI系统集成提供更强大的支持。
2118 2
2025年GitHub平台上的十大开源MCP服务器汇总分析
|
3月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
318 10
|
3月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。

热门文章

最新文章