热度 5|
找出LINUX最消耗资源的进程
TOP
查看当前最消耗CPU/Memory的进程信息
主要参数
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的行程。
n:显示更新的次数,完成后将会退出to
显示参数:
PID(Process ID):进程标示号。
USER:进程所有者的用户名。
PR:进程的优先级别。
NI:进程的优先级别数值。
VIRT:进程占用的虚拟内存值。
RES:进程占用的物理内存值。
SHR:进程使用的共享内存值。
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
%CPU:该进程占用的CPU使用率。
%MEM:该进程占用的物理内存和总内存的百分比。
TIME+:该进程启动后占用的总的CPU时间。
Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
PS
可以使用一下命令查使用内存最多的5个进程
ps -aux | sort -k4nr | head 5
可以使用一下命令查使用CPU最多的5个进程
ps -aux | sort -k3nr | head 5
VMSTAT
只能给出当前CPU/MEMORY/IO的总体性能,没有单个进程信息
通过以上命令大致可以确定OS消耗最多资源的进程信息,另外可以从数据库层面查看TOP进程
找出过去4个小时内登陆且在近30分钟调用过的sql
Find Sessions with the Highest CPU Consumption
-- sessions with highest CPU consumption SELECT s.sid, s.serial#, p.spid as "OS PID",s.username, s.module, st.value/100 as "CPU sec" FROM v$sesstat st, v$statname sn, v$session s, v$process p WHERE sn.name = 'CPU used by this session' -- CPU AND st.statistic# = sn.statistic# AND st.sid = s.sid AND s.paddr = p.addr AND s.last_call_et < 1800 -- active within last 1/2 hour AND s.logon_time > (SYSDATE - 240/1440) -- sessions logged on within 4 hours ORDER BY st.value;
SID SERIAL# OS PID USERNAME MODULE CPU sec ---------- ---------- ------------ -------------------- ---------------------------------------- ---------- 141 1125 15315 SYS sqlplus@coehq2 (TNS V1-V3) 8.25 147 575 10577 SCOTT SQL*Plus 258.08 131 696 10578 SCOTT SQL*Plus 263.17 139 218 10576 SCOTT SQL*Plus 264.08 133 354 10583 SCOTT SQL*Plus 265.79 135 277 10586 SCOTT SQL*Plus 268.02 |
Find Sessions with Highest Waits of a Certain Type
-- sessions with the highest time for a certain wait SELECT s.sid, s.serial#, p.spid as "OS PID", s.username, s.module, se.time_waited FROM v$session_event se, v$session s, v$process p WHERE se.event = '&event_name' AND s.last_call_et < 1800 -- active within last 1/2 hour AND s.logon_time > (SYSDATE - 240/1440) -- sessions logged on within 4 hours AND se.sid = s.sid AND s.paddr = p.addr ORDER BY se.time_waited;
SQL> / Enter value for event_name: db file sequential read
SID SERIAL# OS PID USERNAME MODULE TIME_WAITED ---------- ---------- ------------ -------------------- ---------------------------------------- ----------- 141 1125 15315 SYS sqlplus@coehq2 (TNS V1-V3) 4 147 575 10577 SCOTT SQL*Plus 45215 131 696 10578 SCOTT SQL*Plus 45529 135 277 10586 SCOTT SQL*Plus 50288 139 218 10576 SCOTT SQL*Plus 51331 133 354 10583 SCOTT SQL*Plus 51428 |
10g or higher: Find Sessions with the Highest DB Time
-- sessions with highest DB Time usage SELECT s.sid, s.serial#, p.spid as "OS PID", s.username, s.module, st.value/100 as "DB Time (sec)" , stcpu.value/100 as "CPU Time (sec)", round(stcpu.value / st.value * 100,2) as "% CPU" FROM v$sesstat st, v$statname sn, v$session s, v$sesstat stcpu, v$statname sncpu, v$process p WHERE sn.name = 'DB time' -- CPU AND st.statistic# = sn.statistic# AND st.sid = s.sid AND sncpu.name = 'CPU used by this session' -- CPU AND stcpu.statistic# = sncpu.statistic# AND stcpu.sid = st.sid AND s.paddr = p.addr AND s.last_call_et < 1800 -- active within last 1/2 hour AND s.logon_time > (SYSDATE - 240/1440) -- sessions logged on within 4 hours AND st.value > 0;
SID SERIAL# OS PID USERNAME MODULE DB Time (sec) CPU Time (sec) % CPU ---------- ---------- ------------ -------- ---------------------------------------- ------------- -------------- ---------- 141 1125 15315 SYS sqlplus@coehq2 (TNS V1-V3) 12.92 9.34 72.29 |
使用dbms_system.set_env/oradebug/dbms_monitor对相应进程作10046跟踪,然后使用tkprof格式化
tkprof <trace file name> <output file name> sort=fchela,exeela,prsela
根据相应信息可以进一步确定资源都消耗在哪些地方