`
limafa
  • 浏览: 16757 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

检测SOLARIS上的ORACLE PROCESSES的内存使用量

阅读更多

检测SOLARIS上的ORACLE PROCESSES的内存使用量

这篇文章是翻译的,加入了一些我的例子和解释。看原文的到直接到文章最后

目的
-------------------------
检测SOLARIS上的ORACLE PROCESSES的内存使用量。

适用的范围
--------------------------
本篇文章介绍给系统管理员或数据库管理员,如何对ORACLE在SOLARIS系统上的内存使用进行监控。

对ORACLE进程类型的理解
----------------------------------------

首先需要了解的是ORACLE后台进程。
ORACLE后台进程同INSTANCE一起创建,在操作系统上的命名规则是“ora_ProcessName_SID”。SID是ORACLE_SID。例如:SID是ora817的PROCESS MONITOR后台进程的名称是“ora_pmon_ora817”。
另外需要注意的类型是用户或客户端的进程。它们的命名规则同启动程序的名称相同。例如SQLPLUS程序的名称就是“sqlplus”。
另一种进程类型是ORACLE的服务器进程(server processes) 或叫影子进程(shadow processes)。server processes 接受用户进程的请求,访问数据库实例完成请求。在dedicated模式和MTS模式下,分别对应一个或多个用户进程。命名规则是“oracleSID”,例如“oracleORA817”是ORACLE_SID为ora817的服务器进程名。
复制内容到剪贴板
代码:

# ps -ef|grep ora
oracle6372 10 Aug 06 ? 0:00 ora_arc1_ora817
………….
oracle 365 10 Jul 25 ? 0:00 ora_pmon_ora817
oracle 367 10 Jul 25 ? 0:01 ora_dbw0_ora817
oracle 369 10 Jul 25 ? 0:01 ora_lgwr_ora817
oracle 371 10 Jul 25 ? 0:01 ora_ckpt_ora817
oracle 373 10 Jul 25 ? 0:01 ora_smon_ora817
oracle 375 10 Jul 25 ? 0:00 ora_reco_ora817
oracle 377 10 Jul 25 ? 0:12 ora_snp0_ora817
oracle 379 10 Jul 25 ? 0:01 ora_arc0_ora817
oracle 470 4630 Jul 25 ? 0:01 dtwm
oracle 481 10 Jul 25 ? 0:00 /bin/ksh /usr/dt/bin/sdtvolcheck -d -z 5 cdrom,zip,jaz,dvdrom,rmdisk
oracle 500 4990 Jul 25 ?? 0:00 /usr/dt/bin/dtterm -C -ls
oracle 498 4810 Jul 25 ? 0:00 /bin/cat /tmp/.removable/notify481
oracle 502 5000 Jul 25 pts/5 0:00 -sh
oracle715171500 10:07:03 ? 0:00 oracleora817 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle715071430 10:07:02 pts/6 0:00 sqlplus system/manager
oracle715271500 10:07:05 pts/6 0:00 /bin/sh
oracle714371390 10:06:54 pts/6 0:00 -sh
oracle6346 10 Aug 06 ? 0:00 /export/oracle/app/oracle/product/8.1.7/bin/tnslsnr LISTENER -inherit
root715471530 10:07:20 pts/6 0:00 grep ora

理解ORACLE的内存使用

ORACLE的内存使用有两种基本的使用方式:私有或共享(shared或privated)。私有类型同时只能被单一进程所使用,而共享内存则可以同时被多个进程所使用(存在争用)。
最大的共享内存段是SGA。SGA被映射到一块虚拟地址空间供所有后台进程和服务器进程使用。 大多数显示内存使用的程序,如“top”或“ps -lf”都不能区别共享和私有内存,也不能显示出每个后台进程和服务器进程的SGA使用。它显示的数值可能是ORACLE使用了多次的数量,其总和可能已经大于实际访问的物理内存量。
为了正确检测ORACLE的内存使用,我们可以利用“/usr/proc/bin/pmap”。同它相关的一个脚本是“omemuse”,即Oracle Memory Usage的意思。这个脚本调用pmap来检测ORACLE的内存使用。我们可以打“omemuse h”来看详细的介绍。脚本跟踪指定的ORACLE进程并报告相应的私有和共享内存的使用大小。
后台进程使用私有内存的大小基本相同,因为所有的后台进程实际上只是在对“$ORACLE_HOME/bin/oracle”的不同调用请求而已。
检测服务器进程的内存使用复杂了些,因为不同时间上的内存使用可能大不相同。为了得到近似的数值,我们可以在数据库运行高峰期进行平均采样后取均值。
ORACLE后台进程和服务器进程使用内存的块照值可以通过“omemuse SB”来获得。此命令将显示ORACLE所有的服务器进程使用的私有内存总大小,ORACLE所有后台进程使用私有内存的总大小,ORACLE后台进程和服务器进程所使用的共享内存的总和。最后,给出INSTANCE使用内存的总大小。
复制内容到剪贴板
代码:


$ sqlplus system/manager
SQL*Plus: Release 8.1.7.0.0 - Production on Tue Jul 30 13:04:09 2002
(c) Copyright 2000 Oracle Corporation.All rights reserved.
Connected to:
Oracle8i Enterprise Edition Release 8.1.7.0.0 – Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
SQL> select spid,username,terminal from v$process;
SPID USERNAME TERMINAL
--------- --------------- ------------------------------
365 oracle UNKNOWN
…(details about background processes)
4141 oracle pts/2
10 rows selected.
# su - oracle
Sun Microsystems Inc. SunOS 5.8 Generic February 2000
$ cd /
$ ./memcheck S
Total Shadow(bytes) : 958464
-----
Grand Total (bytes) : 958464
$ ./memcheck B
Total Private (bytes) : 13332480
Total Shared(bytes) : 145223680
-----
Grand Total (bytes) : 158556160
$ ./memcheck SB
Total Shadow(bytes) : 958464
Total Private(bytes) : 13332480
Total Shared(bytes) : 145223680
-----
Grand Total (bytes) : 159514624
$ ./memcheck P 4141
Total Private(bytes) : 1028096
Total Shared(bytes) : 145223680
-----
Grand Total (bytes) : 146251776
关于使用pmap和检测进程内存使用的更详细信息请参阅:

http://www.itworld.com/Comp/2402/UIR980301perf
http://www.sun.com/sun-on-net/performance/vmsizing.pdf

附录:对应脚本
复制内容到剪贴板
代码:


#!/usr/bin/sh
#
# Copyright 2001 Oracle Corporation
#
# program: omemuse (Oracle MEMory USagE)
# by Richard Gulledge
#
# modification history:
# date by comments
# ----------------------------------
# 11/15/1999rgulledgoriginal program
# 04/16/2001rgulledgminor usage check mods
#

usage()
{
echo "Usage: $0 [ SB ]"
echo "Usage: $0 [ P <pid> ]"
echo "Usage: $0 [ h ]"
echo " "
echo "specify 'S' for Oracle shadow processes"
echo "specify 'B' for Oracle background processes (includes shared memory SGA)"
echo "specify 'h' for help"
echo " "
}

echo " "

#
# check usage
#
if [ $# = "0" ];then
usage;exit 1
fi
Parm1=$1
if [ $Parm1 = "h" ];then
echo "This script uses the Sun Solaris pmap command to determine memory usage"
echo "for Oracle server [B]ackground processes and/or [S]hadow processes."
echo "An individual [P]rocess can also be specified."
echo " "
echo "Although the Oracle server background processes memory usage should"
echo "remain fairly constant, the memory used by any given shadow process"
echo "can vary greatly.This script shows only a snapshot of the current"
echo "memory usage for the processes specified."
echo " "
echo "The 'B' option shows the sum of memory usage for all Oracle server"
echo "background processes, including shared memory like the SGA."
echo " "
echo "The 'S' option shows the sum of private memory usage by all"
echo "shadow processes.It does not include any shared memory like the"
echo "SGA since these are part of the Oracle server background processes."
echo " "
echo "The 'P' option shows memory usage for a specified process, broken"
echo "into two categories, private and shared.If the same executable"
echo "for this process was invoked again, only the private memory"
echo "would be allocated, the rest is shared with the currently running"
echo "process."
echo " "
usage;exit 1
fi
echo $Parm1|grep '[SBP]' > /dev/null
ParmFound=$?
if [ $ParmFound != "0" ];then
usage;exit 1
fi
echo $Parm1|grep P > /dev/null
ParmFound=$?
if [ $ParmFound = "0" ];then
if [ $Parm1 != "P" ];then
usage;exit 1
fi
if [ "X$2" = "X" ];then
usage;exit 1
fi
Parm2=$2
echo $Parm2|grep '[^0-9]' > /dev/null
ParmFound=$?
if [ $ParmFound = "0" ];then
usage;exit 1
fi
PidOwner=`ps -ef | grep -v grep | grep $Parm2 | grep -v $0 | awk '{print $1}'`
CurOwner=`/usr/xpg4/bin/id -un`
if [ "X$PidOwner" != "X$CurOwner" ];then
echo "Not owner of pid $Parm2, or pid $Parm2 does not exist"
echo " "
usage;exit 1
fi
else
if [ "X${ORACLE_SID}" = "X" ];then
echo "You must set ORACLE_SID first"
usage;exit1
fi
fi

#
# initialize variables
#
Pmap="/usr/proc/bin/pmap"
SharUse="/tmp/omemuseS$$"
PrivUse="/tmp/omemuseP$$"
ShadUse="/tmp/omemuseD$$"
PidPUse="/tmp/omemusePP$$"
PidSUse="/tmp/omemusePS$$"
TotalShad=0
TotalShar=0
TotalPriv=0
PidPriv=0
PidShar=0

#
# shadow processes
#
echo $Parm1|grep S > /dev/null
ParmFound=$?
if [ $ParmFound = "0" ];then
ShadPrc="`ps -ef|grep -v grep|grep oracle$ORACLE_SID|awk '{print $2}'`"
echo "" > $ShadUse
for i in $ShadPrc;do
$Pmap $i | grep "read/write" | grep -v shared | \
awk '{print $2}' | awk -FK '{print $1}' >> $ShadUse
done
for i in `cat $ShadUse`;do
TotalShad=`expr $TotalShad + $i`
done
TotalShad=`expr $TotalShad "*" 1024`
echo "Total Shadow(bytes) :$TotalShad"
/bin/rm $ShadUse
fi

#
# non-shared portion of background processes
#
echo $Parm1|grep B > /dev/null
ParmFound=$?
if [ $ParmFound = "0" ];then
OrclPrc="`ps -ef|grep -v grep|grep ora_|grep $ORACLE_SID|awk '{print $2}'`"
BkgdPrc="`echo $OrclPrc|awk '{print $1}'`"
echo "" > $PrivUse
for i in $OrclPrc;do
$Pmap $i | grep "read/write" | grep -v shared | \
awk '{print $2}' | awk -FK '{print $1}' >> $PrivUse
done
for i in `cat $PrivUse`;do
TotalPriv=`expr $TotalPriv + $i`
done
TotalPriv=`expr $TotalPriv "*" 1024`
echo "Total Private (bytes) :$TotalPriv"

#
# shared portion of background processes
#
echo "" > $SharUse
$Pmap $BkgdPrc | grep "read/exec" | \
awk '{print $2}' | awk -FK '{print $1}' >> $SharUse
$Pmap $BkgdPrc | grep "shared" | \
awk '{print $2}' | awk -FK '{print $1}' >> $SharUse
for i in `cat $SharUse`;do
TotalShar=`expr $TotalShar + $i`
done
TotalShar=`expr $TotalShar "*" 1024`
echo "Total Shared(bytes) :$TotalShar"
/bin/rm $SharUse $PrivUse
fi

#
# non-shared portion of pid
#
echo $Parm1|grep P > /dev/null
ParmFound=$?
if [ $ParmFound = "0" ];then
echo "" > $PidPUse
$Pmap $Parm2 | grep "read/write" | grep -v shared | \
awk '{print $2}' | awk -FK '{print $1}' >> $PidPUse
for i in `cat $PidPUse`;do
PidPriv=`expr $PidPriv + $i`
done
PidPriv=`expr $PidPriv "*" 1024`
echo "Total Private (bytes) :$PidPriv"

#
# shared portion of pid
#
echo "" > $PidSUse
$Pmap $Parm2 | grep "read/exec" | awk '{print $2}' | \
awk -FK '{print $1}' >> $PidSUse
$Pmap $Parm2 | grep "shared" | awk '{print $2}' | \
awk -FK '{print $1}' >> $PidSUse
for i in `cat $PidSUse`;do
PidShar=`expr $PidShar + $i`
done
PidShar=`expr $PidShar "*" 1024`
echo "Total Shared(bytes) :$PidShar"
/bin/rm $PidPUse $PidSUse
fi

#
# Display grand total
#
Gtotal="`expr $TotalShad + $TotalPriv + $TotalShar + $PidPriv + $PidShar`"
echo " -----"
echo "Grand Total (bytes) :$Gtotal"
echo " "

----------------------
btw:我是ITPUB上的TOPXU。很高兴看到另外一个ORACLE技术人员组成的论坛。CHAO_PING斑竹可能是吸引我来这里的一个原因。翻出来以前翻译的一篇文章,看原文请到这里:

HTTP://METALINK.ORACLE.COM/ 文章编号:Note:153655.1
分享到:
评论

相关推荐

    Solaris系统平台Oracle数据库内存及其相关参数的使用原则.pdf

    Solaris系统平台Oracle数据库内存及其相关参数的使用原则.pdf

    Oracle Solaris 11 Oracle Solaris Administration:Oracle Solaris Z

    Oracle Solaris Zones 提供了高效、轻量级的容器化解决方案,使得系统资源如 CPU、内存、网络和存储能够被有效地管理和分配。 在 Oracle Solaris 10 中,Zones 技术首次引入,主要目标是提高服务器利用率和简化管理...

    Solaris10安装Oracle10G文档

    尽管在Solaris10中修改/etc/system文件对设置共享内存和信号量没有效果,但仍然需要列出这些设置以满足Oracle的检查。这些参数包括shmsys和semsys的多个条目。 **软件解包**: Oracle安装介质通常是gzip压缩的cpio...

    solaris安装oracle详细安装步骤

    * 点选上图的“Customize Hardware”,进入如下设置界面,设置 memory,根据本地电脑的内存进行相应的设置(建议使用 1.5G 的内存给虚拟机)。 * Processors 使用默认设置。 * 操作设置 CD\DVD,选择 iso 文件所在的...

    solaris内存检测方法

    Solaris 操作系统提供了多种内存检测方法,其中之一是使用 dbx 工具中的 Runtime Checking(RTC)模块。RTC 模块不仅可以检测内存泄漏,还可以检测内存访问和使用问题。 RTC 模块的使用需要满足一些前提条件,例如...

    solaris安装Oracle

    在Solaris操作系统上安装Oracle数据库是一个涉及多步骤的过程,本文将详细阐述这些步骤以及在安装过程中需要关注的关键知识点。 首先,在创建虚拟机时,选择安装Solaris10x86-64版本。安装过程中应特别注意/tmp和...

    在Solaris 上部署Oracle 数据库

    2.Oracle 将 Solaris 10 操作系统顶级容器视为硬分区 – 以及只许可在 Solaris 容器中配置的 CPU 或核心的能力,如何提供灵活性、整合机会和可能的成本节约 3.在 Solaris 容器中运行 Oracle 数据库时需要阅读的详细...

    solaris 10安装oracle10g配置文档

    在本文中,我们将深入探讨如何在Solaris 10操作系统上安装和配置Oracle 10g数据库。Oracle 10g是一款强大的关系型数据库管理系统,它在企业级应用中广泛使用,而Solaris 10作为Sun Microsystems开发的UNIX操作系统,...

    solaris11+oracle11g安装

    Solaris 11 上 Oracle 11g 安装和配置 Solaris 11 是一款流行的Unix操作系统, Oracle 11g 是一种流行的关系数据库管理系统。下面将详细介绍如何在 Solaris 11 上安装和配置 Oracle 11g 数据库。 基本配置 在...

    Oracle Solaris 11.2 Securing Users and Processes in Oracle Sola

    Oracle Solaris 11.2 Securing Users and Processes in Oracle Solaris 11.2-142

    Oracle Solaris 11 Oracle Solaris Administration:Devices and File

    《Oracle Solaris 11 Oracle Solaris Administration: Devices and File Systems》是Oracle公司发布的一本技术指南,旨在帮助管理员深入了解和管理Oracle Solaris 11操作系统中的设备和文件系统。这本书涵盖了Oracle...

    Oracle Solaris 11.2 Oracle Solaris Modular Debugger Guide-180

    4. **性能分析**:使用SMD进行性能监控和分析,找出系统性能下降的原因,包括CPU使用率、I/O延迟、内存瓶颈等。 5. **故障排查**:提供详细的步骤和技巧,帮助用户定位并解决系统崩溃、服务中断等故障。 6. **安全...

    solaris10U11+Oracle RAC 11g安装文档

    "Solaris 10 U11 + Oracle RAC 11g 安装文档" 本文档详细介绍了 Solaris 10 U11 操作系统安装和 Oracle RAC 11g 的安装实施管理过程。该文档分为七个部分:系统层环境准备、Oracle Grid Infrastructure 和 Database...

    Solaris10 安装Oracle11g

    本章节详细介绍了在 Solaris 10 操作系统上安装 Oracle 11g R2 数据库的具体要求和步骤。 ##### 系统版本 - **操作系统**: Oracle Solaris 10 1/13s 10x_u11wos_24a X86 (64位) - **数据库版本**: Oracle 11g R2 ...

    Oracle Solaris 11.2 Oracle Solaris 11.2 Security Compliance Gu

    Oracle Solaris 11.2 Oracle Solaris 11.2 Security Compliance Guide-14

    Oracle Solaris 11 Oracle Solaris Administration:Security Service

    Oracle Solaris 11 Oracle Solaris Administration:Security Services-2678

    Oracle Solaris 11 Oracle Solaris Administration:Network Services

    Oracle Solaris 11 Oracle Solaris Administration:Network Services-646

    Oracle Solaris 10 Oracle Solaris ZFS Administration Guide-332

    《Oracle Solaris 10 Oracle Solaris ZFS 管理指南》是Oracle公司发布的一份详细的技术文档,旨在帮助管理员有效地管理和维护Oracle Solaris 10操作系统中的ZFS文件系统。ZFS(Zettabyte File System)是Oracle ...

    Oracle Solaris 11 Oracle Solaris Administration:SAN Configuratio

    Oracle Solaris 11 是一款广泛使用的操作系统,特别适用于企业级服务器环境,它提供了强大的系统管理功能,包括存储区域网络(SAN)配置和多路径(I/O)管理。这本书——"Oracle Solaris 11 Oracle Solaris ...

Global site tag (gtag.js) - Google Analytics