《一次现场故障处理的总结(共8页).doc》由会员分享,可在线阅读,更多相关《一次现场故障处理的总结(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上一次实际现场故障处理的总结2011年7月27日,北京西便门邮政一台安装红旗DC5sp4的服务器在早上运行时ORACLE报错,不能读一个表,导致ORACLE不能正常运行,然后直接影响这台服务器的正常运行。其管理员查看系统内存占用过大,要求红旗公司派下现场给予处理。经我们现场检查,发现其ORACLE运行时内存共占用54GB左右,而其总的物理内存为64GB。然而待服务器重启后,还未启动ORACLE,内存就被ORACLE用户的进程占用了49GB左右。现场初步判断应该是ORACLE配置的问题。建议让ORACLE公司派人来检查一下问题。我们同时收集了该服务器运行信息回公司分析。第
2、二天给予明确回复。28日,对昨天下现场工作进行分析总结。通过这第一次下现场,从中学到不少实用技巧,发现售后服务工作需要有比较全面的知识和技术,才能对故障现象进行深入准确地分析,发现问题,并提出解决或建议方案。首先,检查系统运行状态主要用到的命令有如下四个:一、ps命令ps -ef &显示所有进程,并用ASCII字符显示树状结构,表达程序间的相互关系。ps -ef | wc -l &统计当前共有多少个进程在运行。ps -ef | grep oracle &查看与oracle有关的所有进程信息。具体命令解释如下: 1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。 2)ps -A 显示
3、所有程序。3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 4)ps -e 此参数的效果和指定A参数相同。 5)ps e 列出程序时,显示每个程序所使用的环境变量。 6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。 7)ps -H 显示树状结构,表示程序间的相互关系。 8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。 9)ps s 采用程序信号的格式显示程序状况。 10)ps S 列出程序时,包括已中断的子程序资料。 11)ps -t指定终端机编号,并列出属于该终端机的程序的状况。 12)ps u 以用户为主的格式
4、来显示程序状况。 13)ps x 显示所有程序,不以终端机来区分。 最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。二、lsoflsof | grep oracle&查看被打开的与ORACLE有关的文件情况。lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,任何事物都是文件,设备是文件,目录是文件,甚至sockets也是文 件。所以,用好lsof命令,对日常的linux管理非常有帮助。以下的说明,大部分内容来自lsof的manual文档。我所做的只是在中文翻译的基础上,
5、进行简单的分类说明,并列举最常用的参数。 (一)输出说明lsof是linux最常用的命令之一,通常的输出格式为: 引用COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME 常见包括如下几个字段:更多的可见manual。1、COMMAND默认以9个字符长度显示的命令名称。可使用+c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名2、PID:进程的ID号3、PPID父进程的IP号,默认不显示,当使用-R参数可打开。4、PGID进程组的ID编号,默认也不会显示,当使用-g参数时可打开。5、USER命令的执行UID或系统中登陆的用户名称。默认显示为用户
6、名,当使用-l参数时,可显示UID。6、FD是文件的File Descriptor number,或者如下的内容:(这里很难翻译对应的意思,保留英文) 7、TYPE 引用IPv4 IPv4的包;IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;DIR 目录LINK 链接文件 详情请看manual中更多的注释。8、DEVICE使用character special、block special表示的设备号9、SIZE文件的大小,如果不能用大小表示的,会留空。使用-s参数控制。10、NODE本地文件的node码,或者协议,如TCP等11、NAME挂载点
7、和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等 (二)参数1、不带额外参数运行 lsof path/filename 显示已打开该目录或文件的所有进程信息 lsof which httpd 显示指定命令的信息2、参见参数-c w 显示以w开头命令的已打开文件的信息 lsof -c sshd -p PID 显示指定PID已打开文件的信息 lsof -p 4401 +d dir 依照文件夹dir来搜寻,但不会打开子目录 lsof +d /root +D dir 打开dir文件夹以及其子目录搜寻 lsof +D /root/ -d s 以FD列的信息进行匹配,可使用3-1
8、0,表示范围,3,10表示某些值 lsof -d 3-10 -u 显示某用户的已经打开的文件(或该用户执行程序已经打开的文件) lsof -u rootlsof -u 0 可配合正规表达式使用表示不包括root用户的信息: lsof -u root -i 监听指定的协议、端口、主机等的网络信息,格式为: 引用46protohost|addr:svc_list|port_list 例如: lsof -i tcp192.168.228.244 为防备电子邮件地址收集器,这个 E-mail 地址被隐藏,你的浏览器必须支持 Javascript 才可看到这个邮件地址 lsof -i:22 还可以使用一
9、些参数控制显示结果: 引用-l 禁止将userID转换为登陆名称,即显示UID-n 禁止将IP地址转换为hostname主机文件-P 不显示端口名称 -g s 从PGID列进行匹配 lsof -g 3-10 3、其他参数+f 所有路径参数都必须是文件系统,否则不能执行-f 所有路径参数都将作为普通的文件,例如:-f - /中的/,只会匹配单个/路径,而不会是根目录中的所有文件+f和-f后都应加上“-”表终结符: lsof -f - / +L/-L 打开或关闭文件的连结数计算,当+L没有指定时,所有的连结数都会显示(默认);若+L后指定数字,则只要连结数小于该数字的信息会显示;连结数会显示在 N
10、LINK列。例如:+L1将显示没有unlinked的文件信息;+aL1,则显示指定文件系统所有unlinked的文件信息-L 默认参数,其后不能跟数字,将不显示连结数信息 lsof +L1 -t 仅打印进程,方便shell脚本调用 lsof -t -c sshd -F 指定输出那个列,可通过lsof -F?查看-r 不断执行lsof命令,默认每15秒间隔执行一次+r 也是不断执行lsof命令,但直到没有接受到文件信息,则停止 三、free查看内存使用情况。四、top小技巧:查看哪个进程占用内存最大的方法:1、执行top2、按“F”或“O”,然后按 a-z 可以将进程按照相应的列进行排序。3、选
11、择“n”表示以占用内存的大小进行排序,默认为递减排序,按“R”可反向排序。4、命令交互后呈现的进程信息就是以占用内存的大小来排序,第一个进程就是占用当前内存最大的进程。top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使 用方法。top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombieCpu(s): 0.3% us, 1.0
12、% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% siMem: k total, k used, 17616k free, 22052k buffersSwap: k total, 0k used, k free, k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top1 root
13、 16 0 1992 632 544 S 0.0 0.3 0:00.90 init2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/03 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:01:06:48 当前时间up 1:22 系统运行时间,格式为时:分1 user 当前登录用户数load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。此值超过5,则说明系统负载过重。三
14、个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:Tasks: 29 total 进程总数1 running 正在运行的进程数28 sleeping 睡眠的进程数0 stopped 停止的进程数0 zombie 僵尸进程数Cpu(s): 0.3% us 用户空间占用CPU百分比1.0% sy 内核空间占用CPU百分比0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比98.7% id 空闲CPU百分比0.0% wa 等待输入输出的CPU时间百分比0.0% hi0.0% si最后两行为内存信息。
15、内容如下:Mem: k total 物理内存总量k used 使用的物理内存总量17616k free 空闲内存总量22052k buffers 用作内核缓存的内存量Swap: k total 交换区总量0k used 使用的交换区总量k free 空闲交换区总量k cached 缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存 再次被换出时可不必再对交换区写入。进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。序号 列名 含义a PID 进程idb PPID
16、父进程idc RUSER Real user named UID 进程所有者的用户ide USER 进程所有者的用户名f GROUP 进程所有者的组名g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?h PR 优先级i NI nice值。负值表示高优先级,正值表示低优先级j P 最后使用的CPU,仅在多CPU环境下有意义k %CPU 上次更新到现在的CPU时间占用百分比l TIME 进程使用的CPU时间总计,单位秒m TIME+ 进程使用的CPU时间总计,单位1/100秒n %MEM 进程使用的物理内存百分比o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
17、p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATAr CODE 可执行代码占用的物理内存大小,单位kbs DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kbt SHR 共享内存大小,单位kbu nFLT 页面错误次数v nDRT 最后一次写入到现在,被修改过的页面数。w S 进程状态。D=不可中断的睡眠状态R=运行S= 睡眠T=跟踪/停止Z=僵尸进程x COMMAND 命令名/命令行y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名z Flags 任务标志,参考 sched
18、.h默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。命令使用1 工具(命令)名称top2工具(命令
19、)作用显示系统当前的进程和其他状况; top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间 对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。3环境设置在Linux下使用。4 使用方法41使用格式top - d p q c C S s n42参数说明d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。p 通过指定监控进
20、程ID来仅仅监控某个进程的状态。q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。S 指定累计模式s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。i 使top不显示任何闲置或者僵死进程。c 显示整个命令行而不只是显示命令名4.3其他下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。Ctrl+L 擦除并且重写屏幕。h或者? 显示帮助画面,给出一些简短的命令总结说明。k 终止一个
21、进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用 信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。i 忽略闲置和僵死进程。这是一个开关式命令。q 退出程序。r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更 高的优先权。默认值是10。S 切换到累计模式。s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需
22、要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。f或者F 从当前显示中添加或者删除项目。o或者O 改变显示项目的顺序。l 切换显示平均负载和启动时间信息。m 切换显示内存信息。t 切换显示进程和CPU状态信息。c 切换显示命令名称和完整命令行。M 根据驻留内存大小进行排序。P 根据CPU使用百分比大小进行排序。T 根据时间/累计时间进行排序。W 将当前设置写入/.toprc文件中。这是写top配置文件的推荐方法。利用收集回来的系统状态信息,售后工程师进行了认真分析,情况如下:1、根据ORACLE提示的不能读表的错误信息,判断为ORAC
23、LE占用的内存池过大。2、现场查看进程及内存占用情况,很清楚地看出ORACLE占用了47GB内存。经过现场收集的系统信息分析,查看内存信息文件:cat /proc/meminfo,发现Hugepages_Total的值变为了23552。可以判断,应该是在ORACLE安装时修改了系统配置文件/etc/sysctl.conf,即将参数vm.nr_hugepages 的默认值0修改为了23552,而系统默认的Hugepagesize为2048KB,即2MB,那么,ORACLE在启动系统时就已经预先占用了23552页 * 2MB页47104MB,即47GB的内存空间,而ORACLE似乎又并没有使用这预先留出的47GB的内存空间,因此出现了系统一启动,还未正式启动ORACLE时,内存就被占用47GB以上的空间情况。至于ORACLE为何没有用上预留的47GB的内存空间,这可能就是ORACLE的设置问题了。用命令:sysctl -a | grep hugepages也可以查看系统内核配置情况。可以看到vm.nr_hugepages的值。专心-专注-专业
限制150内