系统运维常见问题


一、内存常见问题(故障)

在系统运行过程中,由于各种服务、应用、进程等长时间的运行,势必会产生各种问题,这些问题很反馈在内存的特性中,下面就来看一下几个最常见的内存故障及其解决方案。

1.  内存溢出

所谓内存溢出,就是进程在内存中开辟的空间,存入的数据超过了空间所能存放的最大值,如:2B的内存空间,即16bit二进制,第一位二进制表示正负数,表示数据的有15bit二进制数字,那么有效数值范围是 -32768到32767 。当给该块内存空间存入一个超过这个数值范围的数据时,则会出现溢出现象。这种情况一般会出现在循环中,有变量自增加,循环次数过多或死循环时数值就容易超出范围。

     另外还有一种情况也会发生内存溢出现象:假设定义了一组数据,提取时指定的编号,超过了这组数据的个数。如10元素数组,编号范围 0-9,提取第10、11号时发生溢出。

发生溢出时的现象:程序突然卡死,不再有任何反应,尤其是每运行到某个点时都会卡死,则说明发生溢出的概率较高。溢出属于编程中的bug。

解决方式:上报相关人员,通知开发部门修复bug。

 2.  内存泄露

内存泄露产生的原因:一个进程运行时会占据一块内存空间,进程结束后不释放内存,该进程下次启动,再次占据新的内存空间。进程频繁的启动、停止,造成该进程占据内存空间越来越大。一般在软件中某个功能会有频繁的启动关闭的程序,容易出现泄漏,如:超市的结算区的结算程序,每位顾客都会扫会员卡后扫码结算一次,下一位顾客又重复该操作,那么若有内存泄露现象发生,会对服务器造成较大的内存浪费。

    发生泄露后的现象:系统运行变慢,查看CPU正常、进程数、连接数基本正常,只有内存使用率虚高

     查找、解决方法:

ps -aux  |  sort -rn  -k 4   | head  -n 10 

此命令目的是查看占内存最高的前10个进程,查找有无进程占内存20%上下,则此进程为疑似泄露进程。为了确定是否泄露,可以再写一个脚本,每10分钟运行一次,记录该进程占内存的比例、大小,持续2-3个小时,之后分析日志,看该进程是否每隔几次,占内存就会增长一些,若是,则确定为泄露进程无疑。

那么,即可上报相关人员,由上级人员,联系甲方或软件开发方,得到授权后,要么卸载,要么降级(一般项目中新装或升级软件后可能出现泄露现象)。

3.  内存抖动

    发生内存抖动的原因:当物理内存使用率高,有大量进程需要运行时,系统将会把内存中暂停的、暂时不运行的进程,转存入swap空间,称为换出。

    当swap空间中的进程,需要运行,则会从swap中转回到物理内存中,称为换入。

    当大量进程出现频繁的换入换出,称为内存抖动

    发生抖动后的现象:系统运行变慢,free命令查看到内存使用率(60%+)、swap使用率(30%+-)均高。

    解决方式:上报,申请增加物理内存,或者,将本机的某个业务转移到其他不忙的主机上。

4.  僵尸进程

    关于僵尸进程,是由于父子进程的调用,一方异常关闭,造成另一个无法正常结束,卡顿在内存中,不运行,也不退出造成的。

    若系统中有僵尸进程,则呈现的现象是:CPU、连接数正常,内存略高

    解决僵尸进程,无非是将其查找出来,杀死进程,可以使用如下命令查看:

top    ---查看到僵尸进程数

        ps -ef   |  grep defunct   ---抓取僵尸进程

多次ps  -aux  ,也可以看到该进程占内存比例、大小不变。

使用kill  -9 杀死僵尸进程即可。

二、 CPU监控发现故障


1.  业务上涨

    原因:访问量增加

    现象:系统运行速度慢,查看发现cpu、内存、进程数、连接数都高,sar查看时,可见%user高达50%+-。

tips:可使用如下命令查看本机某服务的连接数

   netstat  -nt  |  grep80  | wc  -l    

其中80代表80端口,即查看本机web服务的连接数,也就是本机的网站正在被多少人同时访问。

netstat -nt  命令功能是显示本机所有正在通信的tcp连接,其中–n表示显示正在通信的连接,-t表示显示tcp通信的连接

    解决:上报,分析发展趋势,若会持续增加,则要么增加服务主机,分流业务;要么限制连接数,做排队等待。

2. 读写故障

    原因:由于网络连接、磁盘读写、存储连接出现故障,造成大量进程处于等待读写状态

    现象:系统运行速度慢,查看发现cpu的%iowait高,说明有读写问题

    解决:iostat 查看每个磁盘的读写速度,对比之前的历史记录,查找读写速度下降明显的磁盘,暂定为疑似故障盘。再查看该盘上划分的文件系统(即分区或LV),若其是正在被某进程、某服务(如数据库)使用的磁盘,那么可确定为故障盘。

    那么,需要立即上报,联系存储人员,数据转移后更换磁盘(LVM中的用pvmove,分区用dd)。

3. 系统检测小结

当一台计算机运行速度慢时,我们的检测思路是从CPU、内存、服务进程入手,查看各个参数,分析可疑项,来查找故障原因。大体判断如下:

查看CPU、内存、服务的进程数

   若都高了,说明业务访问上涨造成的,证明:cpu的%user高,服务进程数多,网络连接数多

   若CPU的%iowait高,则去查读写

   若cpu、进程数、连接数正常,内存虚高:可能是内存泄露或内存抖动。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值