应该不是oracle的内存泄漏,否则那还了得?还是找找真正的原因吧,比如你的oracle使用及软硬件配置情况,是否有其他进程消耗资源。内存不够是用检测一下是被谁占用了。

解决方案 »

  1.   

    有人告诉我可能的原因:Oracle版本太低,应该打补丁;AIX配置有问题,导致系统内存泄漏。
    我查了,好像进程都是跟Oracle有关的,没有其他的进程消耗资源。要么就是我查的方法不对,请大侠告诉我怎么查。
      

  2.   

    是oracle的 background 进程还是server 进程引起的 ?
      

  3.   

    Topas Monitor for host:    gldb01               EVENTS/QUEUES    FILE/TTY
    Wed May 12 09:26:42 2004   Interval:  2         Cswitch      40  Readch     1823
                                                    Syscall     112  Writech   12546
    Kernel    0.0   |                            |  Reads         8  Rawin         0
    User      0.2   |                            |  Writes        2  Ttyout       65
    Wait      0.0   |                            |  Forks         0  Igets         0
    Idle     99.7   |############################|  Execs         0  Namei         1
                                                    Runqueue    0.0  Dirblk        0
    oracle   (22580)  0.2% PgSp:24.3mb oracle       Waitqueue   1.0
    syncd    (2888)   0.0% PgSp: 0.4mb root
    oracle   (18330)  0.0% PgSp: 4.2mb oracle       PAGING           MEMORY
    oracle   (19366)  0.0% PgSp: 2.8mb oracle       Faults        0  Real,MB    2047
    oracle   (24578)  0.0% PgSp: 4.5mb oracle       Steals        0  % Comp     47.6
    oracle   (39078)  0.0% PgSp: 6.6mb oracle       PgspIn        0  % Noncomp  48.1
    tnslsnr  (28840)  0.0% PgSp: 5.8mb oracle       PgspOut       0  % Client    0.5
    topas    (36276)  0.0% PgSp: 0.5mb root         PageIn        0
    dtscreen (22998)  0.0% PgSp: 0.4mb oracle       PageOut       2  PAGING SPACE
    oracle   (9280)   0.0% PgSp: 2.8mb oracle       Sios          1  Size,MB    4096
    dtexec   (25522)  0.0% PgSp: 0.4mb oracle                        % Used      0.9
    dtterm   (37600)  0.0% PgSp: 1.0mb oracle                        % Free     99.0
    telnetd  (26784)  0.0% PgSp: 0.8mb root
    ksh      (18664)  0.0% PgSp: 0.3mb root
    gil      (1548)   0.0% PgSp: 0.3mb root            Press "h" for help screen.
    dtwm     (7872)   0.0% PgSp: 1.5mb oracle          Press "q" to quit program.这是topas命令h/p 后的界面。帮忙看看是不是进程有问题?要查看所有的进程信息,应该怎么查啊?
      

  4.   

    # vmstat 1 3
    kthr     memory             page              faults        cpu
    ----- ----------- ------------------------ ------------ -----------
     r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
     1  1 217512 25861   0   0   0   0    0   0 212   67  82 26 16 58  0
     0  1 217512 25860   0   0   0   0    0   0 210 1674  27  0  0 99  0
     0  1 217516 25856   0   0   0   0    0   0 227  240  87  0  0 99  0
    # vmstat 1 3
    kthr     memory             page              faults        cpu
    ----- ----------- ------------------------ ------------ -----------
     r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
     1  1 218059 25310   0   0   0   0    0   0 212   67  82 26 16 58  0
     0  1 218059 25309   0   0   0   0    0   0 261 1158 116  1 11 85  3
     0  1 218059 25309   0   0   0   0    0   0 238  279 106  1  0 98  0
    昨天可用内存还有100M以上,今天就剩这么多了,降得很快。真的不知道该怎么调。有没有人碰到过这种问题啊?是Oracle需要打补丁还是AIX需要?
      

  5.   

    ps aux|grep ora_     ---   background  process
    ps aux|grep oracle   ---   server      process物理内存有多少?Swap有多大?
    SGA多大?
      

  6.   

    物理内存2G,SGA总量327M,Swap总量怎么查?(不好意思,新手)
      

  7.   

    # ps aux|grep ora_
    oracle   22580  1.1  3.0 85680 66464      - A      May 11 35:09 ora_s000_ora9i
    oracle   18330  0.1  1.0 44356 25144      - A      May 11  2:14 ora_d000_ora9i
    oracle   39078  0.0  1.0 46648 27428      - A      May 11  0:14 ora_pmon_ora9i
    oracle   19366  0.0  1.0 42816 23596      - A      May 11  0:07 ora_lgwr_ora9i
    oracle   24578  0.0  1.0 45348 26132      - A      May 11  0:03 ora_smon_ora9i
    oracle   40092  0.0  1.0 42508 23292      - A      May 11  0:00 ora_ckpt_ora9i
    oracle   33008  0.0  1.0 42400 23184      - A      May 11  0:00 ora_reco_ora9i
    root     36228  0.0  0.0  204  248  pts/2 A    17:47:08  0:00 grep ora_
    oracle   23404  0.0  1.0 44604 25384      - A      May 11  0:00 ora_dbw0_ora9i# ps aux|grep oracle
    oracle   22580  1.1  3.0 85888 66672      - A      May 11 35:12 ora_s000_ora9i
    oracle   18330  0.1  1.0 44356 25144      - A      May 11  2:15 ora_d000_ora9i
    oracle   28840  0.0  0.0 12916 7408      - A      Mar 28 12:56 /ora/OraHome1/bi
    oracle   39078  0.0  1.0 46648 27428      - A      May 11  0:14 ora_pmon_ora9i
    oracle   22040  0.0  1.0 42820 23620      - A    15:34:46  0:01 oracleora9i (LO
    oracle   19366  0.0  1.0 42816 23596      - A      May 11  0:07 ora_lgwr_ora9i
    oracle   37600  0.0  0.0 1128 1388      - A      May 11  0:04 /usr/dt/bin/dtter
    oracle    7872  0.0  0.0 2112 2484      - A      May 08  0:13 dtwm
    oracle    7520  0.0  0.0 1772 2100      - A      May 08  0:11 /usr/dt/bin/dtses
    oracle   24578  0.0  1.0 45348 26132      - A      May 11  0:03 ora_smon_ora9i
    oracle   23822  0.0  1.0  276 10580      - A      Mar 15  2:21 kproc
    oracle   20124  0.0  1.0  276 10564      - A      Mar 15  2:19 kproc
    oracle   33548  0.0  1.0  276 10572      - A      Mar 16  2:15 kproc
    oracle   35090  0.0  1.0  276 10572      - A      Mar 16  2:09 kproc
    oracle   26922  0.0  1.0  276 10576      - A      Mar 15  2:10 kproc
    oracle   35348  0.0  1.0  276 10560      - A      Mar 16  2:08 kproc
    oracle   29746  0.0  1.0  276 10572      - A      Mar 16  2:08 kproc
    oracle   26424  0.0  1.0  276 10576      - A      Mar 15  2:07 kproc
    oracle   29966  0.0  1.0  276 10576      - A      Mar 15  2:07 kproc
    oracle   20382  0.0  1.0  276 10568      - A      Mar 15  2:07 kproc
    oracle   34318  0.0  1.0  276 10576      - A      Mar 16  2:01 kproc
    oracle   27960  0.0  1.0  276 10572      - A      Mar 16  1:56 kproc
    oracle   29290  0.0  1.0  276 10576      - A      Mar 15  1:56 kproc
    oracle   35864  0.0  1.0  276 10572      - A      Mar 16  1:53 kproc
    oracle   33032  0.0  1.0  276 10576      - A      Mar 16  1:53 kproc
    oracle   30506  0.0  1.0  276 10552      - A      Mar 15  1:52 kproc
    oracle   19618  0.0  1.0  276 10572      - A      Mar 15  1:52 kproc
    oracle   32520  0.0  1.0  276 10576      - A      Mar 16  1:48 kproc
    oracle   27432  0.0  1.0  276 10580      - A      Mar 16  1:46 kproc
    oracle   34832  0.0  1.0  276 10580      - A      Mar 16  1:45 kproc
    oracle   29522  0.0  1.0  276 10564      - A      Mar 15  1:42 kproc
    oracle   16808  0.0  1.0  276 10568      - A      Mar 15  1:38 kproc
    oracle   32304  0.0  1.0  276 10588      - A      Mar 16  1:35 kproc
    oracle   34064  0.0  1.0  276 10576      - A      Mar 16  1:34 kproc
    oracle   29080  0.0  1.0  276 10580      - A      Mar 16  1:30 kproc
    oracle   30216  0.0  1.0  276 10564      - A      Mar 16  1:27 kproc
    oracle   33816  0.0  1.0  276 10580      - A      Mar 16  1:27 kproc
    oracle   20640  0.0  1.0  276 10584      - A      Mar 15  1:27 kproc
    oracle   20898  0.0  1.0  276 10572      - A      Mar 15  1:25 kproc
    oracle   31482  0.0  1.0  276 10552      - A      Mar 15  1:24 kproc
    oracle   28466  0.0  1.0  276 10564      - A      Mar 16  1:23 kproc
    oracle   19866  0.0  1.0  276 10584      - A      Mar 15  1:22 kproc
    oracle   35606  0.0  1.0  276 10580      - A      Mar 16  1:19 kproc
    oracle   30982  0.0  1.0  276 10560      - A      Mar 15  1:18 kproc
    oracle   33292  0.0  1.0  276 10572      - A      Mar 16  1:17 kproc
    oracle   27220  0.0  1.0  276 10576      - A      Mar 15  1:17 kproc
    oracle   31992  0.0  1.0  276 10568      - A      Mar 15  1:11 kproc
    oracle   21156  0.0  1.0  276 10564      - A      Mar 15  1:06 kproc
    oracle   34574  0.0  1.0  276 10580      - A      Mar 16  1:02 kproc
    oracle   31566  0.0  1.0  276 10568      - A      Mar 16  1:00 kproc
    oracle   17626  0.0  0.0 1092 1324      - A      May 08  0:03 /usr/dt/bin/ttses
    oracle   40092  0.0  1.0 42508 23292      - A      May 11  0:00 ora_ckpt_ora9i
    oracle   33008  0.0  1.0 42400 23184      - A      May 11  0:00 ora_reco_ora9i
    oracle   36230  0.0  0.0  468  584      - A    17:48:28  0:00 /usr/dt/bin/dtscr
    oracle   32014  0.0  0.0  504  660      - A    17:48:28  0:00 /usr/dt/bin/dtexe
    oracle   39608  0.0  0.0 1140 1400      - A      May 11  0:00 /usr/dt/bin/dtter
    oracle   26210  0.0  0.0  600  640  pts/1 A      May 11  0:00 /usr/bin/ksh
    oracle    7290  0.0  0.0 12148 6844  pts/4 A      May 11  0:00 lsnrctl
    oracle    7984  0.0  0.0 1096 1372      - A      May 08  0:00 /usr/dt/bin/dtter
    root     18068  0.0  0.0  204  248  pts/2 A    17:48:52  0:00 grep oracle
    oracle   23404  0.0  1.0 44604 25384      - A      May 11  0:00 ora_dbw0_ora9i
    oracle   25860  0.0  0.0  504  660      - A      May 11  0:00 /usr/dt/bin/dtexe
    oracle   23072  0.0  0.0  504  660      - A      May 11  0:00 /usr/dt/bin/dtexe
    oracle   21264  0.0  0.0  600  640  pts/4 A      May 11  0:00 /usr/bin/ksh
    oracle   12154  0.0  0.0  572  604  pts/0 A      May 08  0:00 /usr/bin/ksh各位大侠,帮忙看看。
      

  8.   

    或许对你有帮助
    http://www.fanqiang.com/a1/b7/20020415/060201180.html
      

  9.   

    谢谢。用里面的几个命令试了一下,输出的数据请大家一起看看。不知道其中的各列都是什么意思:显示消耗CPU最多的进程
    # ps aux |head -1 ;ps aux |sort -rn +2
    USER       PID %CPU %MEM   SZ  RSS   TTY STAT  STIME  TIME COMMAND
    root       516 44.1  1.0  268 10580    - A    Mar 15 74364:00 kproc
    root       774 15.1  1.0  268 10580    - A    Mar 15 25433:34 kproc
    oracle   17722  0.4  1.0 47008 27792   - A   09:30:12  0:04 ora_s000_ora9i
    root      2888  0.2  0.0  420  432     - A   Mar 15 258:11 /usr/sbin/syncd
    oracle   18330  0.1  1.0 44612 25400   - A   May 11  3:17 ora_d000_ora9i显示10个消耗存储空间最多的进程
    # ps aux |head -1 ;ps aux |sort -rn +3 |head -10
    USER       PID %CPU %MEM   SZ  RSS    TTY STAT    STIME  TIME COMMAND
    root     14708  0.0  1.0  272 10584      - A      Mar 15  0:03 kproc
    root     11868  0.0  1.0  272 10576      - A      Mar 15  0:00 kproc
    root      9820  0.0  1.0  272 10580      - A      Mar 15  0:00 kproc
    root      9598  0.0  1.0  272 10584      - A      Mar 15  0:01 kproc
    root      6194  0.0  1.0  276 10588      - A      Mar 15  0:00 kproc
    root      5936  0.0  1.0  276 10588      - A      Mar 15  0:00 kproc
    root      5678  0.0  1.0  276 10588      - A      Mar 15  0:01 kproc
    root      5422  0.0  1.0  276 10588      - A      Mar 15  0:01 kproc
    root      5172  0.0  1.0  276 10588      - A      Mar 15  0:00 kproc
    root      4966  0.0  1.0  276 10588      - A      Mar 15  0:00 kproc而且,查了一下受罚的进程,非常多。请高手指点。多谢。
      

  10.   

    进程kproc环境  产品:RS6000/AIX
    平台: RS
    版本:AIX 4 
    问题  进程kproc 
    解答 当我们使用命令: " ps aux" 或"ps ug" 检查各进程对于CPU和内存的使用情况时,经常会看到 "kproc"(PID 516)进程占有很高的CPU使用率. 这种情况是正常的,此进程代表系统的空闲时间.一般情况,在系统负载不是很高的时候,此进程占CPU达到50% 或更高.
    按照上面说法,kproc进程只会有一个,可能AIX有问题,查阅文档或contact AIX support
      

  11.   

    soory,kproc 可以有多个。应该是这个问题:
    http://www.mamiyami.com/doc/oracle9i/a97297/appa_aix.htmUsing Asynchronous I/O ....The number of kproc servers determines the number of AIO requests that can be executed in the system concurrently, so it is important to tune the number of kproc processes when using filesystems to store Oracle9i datafiles. ...意思是你的oracle9i使用文件系统(不使用裸设备),并且使用了AIX的 AIO,那么kproc的数量会随着并发访问数据库的数量增加。如果不限制kproc的数量,内存会用尽。文章里面有如何设置kproc数量的做法
      

  12.   

    刚才看了看那段,我的感觉是好像不是kproc的数量过多导致内存用尽。我用 # pstat -a | grep -c aios  查看当前运行的AIO servers 的数量,一直都是50
    却不知道怎么查 MINSERVERS and MAXSERVERS 的值。
    是不是因为kproc的数量受到限制出的问题?
      

  13.   

    每个kproc的内存使用1%(根据你上面的数据),50个就使用50%---1G,也太大了吧?
    10个应该就够了
      

  14.   

    楼上有一篇我用 # ps aux|grep oracle 查看所有进程的结果,一共60多个,而且很多时间是Mar 15 和 Mar 16 。
    我回忆了一下,好像AIX上次重启就是在这两天。以后Oracle数据库也死过,但是只是重启了Oracle服务,没有重启AIX。而且重启Oracle服务以后,内存状况并不乐观。不知道那些三月份的进程为什么会滞留。
      

  15.   

    当我们使用命令: " ps aux" 或"ps ug" 检查各进程对于CPU和内存的使用情况时,经常会看到 "kproc"(PID 516)进程占有很高的CPU使用率. 这种情况是正常的,此进程代表系统的空闲时间.一般情况,在系统负载不是很高的时候,此进程占CPU达到50% 或更高
      

  16.   

    xyzhh(逍遥者寒号) ,你说的楼上已经有了,我不太明白你的意思。不是我要问的问题啊。
      

  17.   

    drabit(square) 帮帮忙。我现在修改
    # smit aio 
    # chdev -l aio0 -a maxservers='m' -a minservers='n' 不会出问题吧?那边的系统压力很大,万一出问题,可就麻烦大了。
    还有,m和n分别设多大合适啊?
      

  18.   

    不好说,我没有用过AIX(一直用Compaq Tru64)。建议:
    1.先看看maxservers目前的值(万一有问题,改回去)
    2.minservers没有必要改
      

  19.   

    问题是,maxservers怎么看啊?好像那个文档里没有说。
      

  20.   

    lsdev
    http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds3/lsdev.htm#HDRA29895E1
      

  21.   

    min =硬盘数量×10,但不超过100
    max= min*2
      

  22.   

    照这么说,目前系统共4块硬盘,那么max=80?比现在的50还多?这样岂不是更消耗内存了?(用topas查看,好像只有第三块硬盘有数据写入,其他的都不动。)
      

  23.   

    drabit(square),你贴的那个文章,好像只能查看设备列表,还是不知道maxservers是多少啊。各位大侠,帮帮忙,时间来不及了
      

  24.   

    大家看看这句话:MAXSERVERS  You can incrementally increase this value to a maximum of the value of the MAXSERVERS parameter divided by 2 or the number of disks accessed divided by 10, whichever is greater.  它好像是说,这个值越大越好,是不是啊?
      

  25.   

    那段话是什么意思?
    取 磁盘数量/10 和 MAXSERVERS/2的最大值?你会用man吗?
    lsattr行不行?