标签云
asm恢复 bbed bootstrap$ dul In Memory kcbzib_kcrsds_1 kccpb_sanity_check_2 MySQL恢复 ORA-00312 ORA-00607 ORA-00704 ORA-00742 ORA-01110 ORA-01555 ORA-01578 ORA-01595 ORA-08103 ORA-600 2131 ORA-600 2662 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kcbzib_kcrsds_1 ORA-600 KCLCHKBLK_4 ORA-15042 ORA-15196 ORACLE 12C oracle dul ORACLE PATCH Oracle Recovery Tools oracle加密恢复 oracle勒索 oracle勒索恢复 oracle异常恢复 Oracle 恢复 ORACLE恢复 ORACLE数据库恢复 oracle 比特币 OSD-04016 YOUR FILES ARE ENCRYPTED 勒索恢复 比特币加密文章分类
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (103)
- 数据库 (1,763)
- DB2 (22)
- MySQL (76)
- Oracle (1,605)
- Data Guard (52)
- EXADATA (8)
- GoldenGate (24)
- ORA-xxxxx (166)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (15)
- ORACLE 21C (3)
- Oracle 23ai (8)
- Oracle ASM (69)
- Oracle Bug (8)
- Oracle RAC (54)
- Oracle 安全 (6)
- Oracle 开发 (28)
- Oracle 监听 (28)
- Oracle备份恢复 (588)
- Oracle安装升级 (97)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (86)
- PostgreSQL (30)
- pdu工具 (6)
- PostgreSQL恢复 (9)
- SQL Server (32)
- SQL Server恢复 (13)
- TimesTen (7)
- 达梦数据库 (3)
- 达梦恢复 (1)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (39)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (22)
-
最近发表
- .sstop勒索加密数据库恢复
- 解决一次硬件恢复之后数据文件0kb的故障恢复case
- Error in invoking target ‘libasmclntsh19.ohso libasmperl19.ohso client_sharedlib’问题处理
- ORA-01171: datafile N going offline due to error advancing checkpoint
- linux环境oracle数据库被文件系统勒索加密为.babyk扩展名溯源
- ORA-600 ksvworkmsgalloc: bad reaper
- ORA-600 krccfl_chunk故障处理
- Oracle Recovery Tools恢复案例总结—202505
- ORA-600 kddummy_blkchk 数据库循环重启
- 记录一次asm disk加入到vg通过恢复直接open库的案例
- CHECKDB 发现了 N 个分配错误和 M 个一致性错误
- 达梦数据库dm.ctl文件异常恢复
- Oracle Recovery Tools修复ORA-00742、ORA-600 ktbair2: illegal inheritance故障
- 可能是 tempdb 空间用尽或某个系统表不一致故障处理
- 11.2.0.4库中遇到ORA-600 kcratr_nab_less_than_odr报错
- [MY-013183] [InnoDB] Assertion failure故障处理
- Oracle 19c 202504补丁(RUs+OJVM)-19.27
- Oracle Recovery Tools修复ORA-600 6101/kdxlin:psno out of range故障
- pdu完美支持金仓数据库恢复(KingbaseES)
- 虚拟机故障引起ORA-00310 ORA-00334故障处理
分类目录归档:Linux
关于linux中oracle用户进程占用内存猜测
本文是针对linux下面显示oracle用户进程占用大量内存的一个猜想性说明,希望各位专家和我一起继续探讨该问题
ORACLE用户进程占用私有内存分析
top命令结果
[oracle@ora02 31500]$ top -c top - 12:13:16 up 254 days, 12:14, 2 users, load average: 1.53, 1.62, 1.33 Tasks: 293 total, 3 running, 290 sleeping, 0 stopped, 0 zombie Cpu(s): 3.4% us, 0.8% sy, 0.0% ni, 94.7% id, 1.1% wa, 0.0% hi, 0.0% si Mem: 4147172k total, 4129724k used, 17448k free, 20348k buffers Swap: 4192956k total, 217772k used, 3975184k free, 2575320k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12505 oracle 17 0 1561m 972m 970m R 100 24.0 3:45.89 oracletxzldb (LOCAL=NO) 12475 oracle 16 0 1561m 931m 929m S 4 23.0 4:08.65 oracletxzldb (LOCAL=NO) 12477 oracle 16 0 1561m 945m 942m S 2 23.3 3:36.92 oracletxzldb (LOCAL=NO) 12479 oracle 16 0 1561m 944m 941m S 2 23.3 4:27.29 oracletxzldb (LOCAL=NO) 12483 oracle 16 0 1561m 939m 937m R 2 23.2 3:49.00 oracletxzldb (LOCAL=NO) 12493 oracle 16 0 1561m 958m 955m S 2 23.7 3:35.35 oracletxzldb (LOCAL=NO)
补充说明:
VIRT 进程使用的虚拟内存总量 RES 进程使用的、未被换出的物理内存大小 SHR 共享内存大小
通过这里可以得出几个信息
12505进程实际使用内存情况:972-970=2M
12505进程%MEM:972*1024/4147172=0.24000162
12505进程在数据库中占用内存
SQL> select PGA_ALLOC_MEM/1024/1024 MEM from v$process where spid=12505; MEM ---------- 1.90997028
通过这里可以看出12505进程实际上是占用了970M的共享内存,占用2M的PGA内存
ORACLE用户进程占用共享内存分析
分析12505进程的当前进程状态
[oracle@ora02 31500]$ cd /proc/12505 [oracle@ora02 12505]$ cat status Name: oracle State: S (sleeping) SleepAVG: 92% Tgid: 12505 Pid: 12505 PPid: 1 TracerPid: 0 Uid: 501 501 501 501 Gid: 502 502 502 502 FDSize: 32 Groups: 501 502 VmSize: 1599004 kB <--使用内存(包括虚拟内存)总量1599004/1024=1561.52734和top中VIRT基本吻合 VmLck: 0 kB VmRSS: 996132 kB <--实际使用内存996132/1024 =972.785156和top看到RES基本吻合 VmData: 832 kB VmStk: 120 kB VmExe: 37307 kB VmLib: 4641 kB StaBrk: 0ad6e000 kB Brk: 0adf2000 kB StaStk: bffff850 kB ExecLim: ffffffff Threads: 1 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000006005203 SigCgt: 00000001c9802cfc CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000
pmap命令分析
[oracle@ora02 12505]$ pmap -d 12505 12505: oracletxzldb (LOCAL=NO) Address Kbytes Mode Offset Device Mapping 0013f000 88 r-x-- 0000000000000000 008:00002 ld-2.3.4.so 00155000 4 r-x-- 0000000000015000 008:00002 ld-2.3.4.so 00156000 4 rwx-- 0000000000016000 008:00002 ld-2.3.4.so 00159000 1176 r-x-- 0000000000000000 008:00002 libc-2.3.4.so 0027f000 8 r-x-- 0000000000125000 008:00002 libc-2.3.4.so 00281000 8 rwx-- 0000000000127000 008:00002 libc-2.3.4.so 00283000 8 rwx-- 0000000000283000 000:00000 [ anon ] 00287000 132 r-x-- 0000000000000000 008:00002 libm-2.3.4.so 002a8000 4 r-x-- 0000000000020000 008:00002 libm-2.3.4.so 002a9000 4 rwx-- 0000000000021000 008:00002 libm-2.3.4.so 002ac000 8 r-x-- 0000000000000000 008:00002 libdl-2.3.4.so 002ae000 4 r-x-- 0000000000001000 008:00002 libdl-2.3.4.so 002af000 4 rwx-- 0000000000002000 008:00002 libdl-2.3.4.so 003b5000 56 r-x-- 0000000000000000 008:00002 libpthread-2.3.4.so 003c3000 4 r-x-- 000000000000d000 008:00002 libpthread-2.3.4.so 003c4000 4 rwx-- 000000000000e000 008:00002 libpthread-2.3.4.so 003c5000 8 rwx-- 00000000003c5000 000:00000 [ anon ] 00ba4000 72 r-x-- 0000000000000000 008:00002 libnsl-2.3.4.so 00bb6000 4 r-x-- 0000000000011000 008:00002 libnsl-2.3.4.so 00bb7000 4 rwx-- 0000000000012000 008:00002 libnsl-2.3.4.so 00bb8000 8 rwx-- 0000000000bb8000 000:00000 [ anon ] 08048000 37308 r-x-- 0000000000000000 0fd:00001 oracle 0a4b7000 8804 rwx-- 000000000246f000 0fd:00001 oracle 0ad50000 648 rwx-- 000000000ad50000 000:00000 [ anon ] 50000000 1540096 rwxs- 0000000000000000 000:00006 [ shmid=0x9000e ] ae000000 4 r-xs- 000000005e000000 000:00006 [ shmid=0x9000e ] ae001000 1156 rwxs- 000000005e001000 000:00006 [ shmid=0x9000e ] ae122000 4 r-xs- 000000005e122000 000:00006 [ shmid=0x9000e ] ae123000 2932 rwxs- 000000005e123000 000:00006 [ shmid=0x9000e ] b79d4000 1024 rwx-- 00000000000f4000 000:0000d zero b7ad4000 512 rwx-- 0000000000074000 000:0000d zero b7b54000 512 rwx-- 0000000000000000 000:0000d zero b7bd4000 36 r-x-- 0000000000000000 008:00002 libnss_files-2.3.4.so b7bdd000 4 r-x-- 0000000000008000 008:00002 libnss_files-2.3.4.so b7bde000 4 rwx-- 0000000000009000 008:00002 libnss_files-2.3.4.so b7bdf000 148 rwx-- 00000000b7bdf000 000:00000 [ anon ] b7c04000 2940 r-x-- 0000000000000000 0fd:00001 libjox9.so b7ee3000 1088 rwx-- 00000000002de000 0fd:00001 libjox9.so b7ff3000 8 rwx-- 00000000b7ff3000 000:00000 [ anon ] b7ff5000 4 r-x-- 0000000000000000 0fd:00001 libskgxn9.so b7ff6000 8 rwx-- 0000000000000000 0fd:00001 libskgxn9.so b7ff8000 4 r-x-- 0000000000000000 0fd:00001 libskgxp9.so b7ff9000 4 --x-- 0000000000001000 0fd:00001 libskgxp9.so b7ffa000 4 rwx-- 0000000000001000 0fd:00001 libskgxp9.so b7ffb000 4 r-x-- 0000000000000000 0fd:00001 libodmd9.so b7ffc000 4 rwx-- 0000000000000000 0fd:00001 libodmd9.so b7ffd000 4 r-x-- 0000000000000000 008:00002 libcwait.so b7ffe000 4 rwx-- 0000000000000000 008:00002 libcwait.so b7fff000 4 rwx-- 00000000b7fff000 000:00000 [ anon ] bffe2000 120 rwx-- 00000000bffe2000 000:00000 [ stack ] ffffe000 4 ----- 0000000000000000 000:00000 [ anon ] mapped: 1599008K writeable/private: 12944K shared: 1544192K
补充说明:
mapped :映射到文件的内存数量 writable/private :进程所占用的私有地址空间数量 shared :与其它进程共享的地址空间数量
ipcs 命令
[oracle@ora02 12505]$ ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x0000cace 65536 root 666 2 0 0x4d4e5251 98305 root 644 330752 0 0x55315352 131074 root 666 4096 0 0x44525354 163843 root 644 632832 0 0x53494152 196612 root 644 1024 0 0x00005643 229381 root 666 1024 1 0x00005654 262150 root 666 1024 1 0x992ad3dc 589838 oracle 640 1581252608 595
结合pmap和ipcs分析(shmid=0x9000e)
SQL> select to_number('9000e','xxxxxxxx') from dual; TO_NUMBER('9000E','XXXXXXXX') ----------------------------- 589838 SQL> select 1540096+4+1156+4+2932 from dual; 1540096+4+1156+4+2932 --------------------- 1544192 SQL> select 1581252608/1024 from dual; 1581252608/1024 --------------- 1544192
通过这里可以得出12505进程中的共享内存,主要是数据库SGA中的共享内存
补充猜测
SQL> show sga; Total System Global Area 1561926292 bytes Fixed Size 453268 bytes Variable Size 603979776 bytes Database Buffers 956301312 bytes Redo Buffers 1191936 bytes SQL> select 1561926292/1024 from dual; 1561926292/1024 --------------- 1525318.64
这里显示数据库配置的sga比ipcs中配置共享内存段小,但是进程在分配总的共享内存时候,使用的是ipcs设定的内存段大小,实际使用的内存可能是sga设置大小(未得到权威资料)
gzexe加密shell脚本
很多时候,我们的脚本中涉及的用户名/密码/ip等敏感信息,我们需要使用一些加密方面来屏蔽这些信息,确保我们的系统安全(主要防菜鸟),虽然shc可以实现强大的加密功能,但是他需要另外安装shc软件,比较麻烦,应对一般的加密,个人推荐直接喜用系统自带的gzexe(大部分Linux,unix都有)
[root@xifenfei tmp]# more xifenfei.sh #!/usr/bin/ksh echo 'xifenfei--'`date` [root@xifenfei tmp]# ./xifenfei.sh xifenfei--Tue Mar 6 13:31:35 CST 2012 [root@xifenfei tmp]# ls -l xifenfei.sh -rwxr-xr-x 1 root root 40 Mar 6 13:30 xifenfei.sh --加密操作 [root@xifenfei tmp]# gzexe xifenfei.sh xifenfei.sh: -5.0% [root@xifenfei tmp]# ls -l xifenfei.sh* -rwxr-xr-x 1 root root 449 Mar 6 13:31 xifenfei.sh -rwxr-xr-x 1 root root 40 Mar 6 13:30 xifenfei.sh~ --加密后文件内容 [root@xifenfei tmp]# strings xifenfei.sh #!/bin/sh skip=14 tmpdir=`/bin/mktemp -d ${TMPDIR:-/tmp}/gzexe.XXXXXXXXXX` || exit 1 prog="${tmpdir}/`echo \"$0\" | sed 's|^.*/||'`" if /usr/bin/tail -n +$skip "$0" | "/bin"/gzip -cd > "$prog"; then /bin/chmod 700 "$prog" trap '/bin/rm -rf $tmpdir; exit $res' EXIT "$prog" ${1+"$@"}; res=$? else echo "Cannot decompress $0" /bin/rm -rf $tmpdir exit 1 fi; exit $res xifenfei.sh UOHI,IM
这里的xifenfei.sh是加密后文件,xifenfei.sh~是源码文件(加密前文件),只需要运行xifenfie.sh即可实现原脚本功能
优点:在大部分系统上均可运行,不用安装额外软件
缺点:破解容易,放君子不防小人
shell处理alert日志
每天都检查oracle日志,所以写了一个比较完善的shell,让其自动处理,在运行程序之前,需要在该脚本目录下新建tmp目录
#!/usr/bin/ksh export LANG=en #临时目录 tmp_dest=$HOME/check/tmp #用户名 username=username #密码 password=password cd $tmp_dest sqlplus -s $username/$password<<XFF>/dev/null set echo on spool sqlplus.txt col name format a20 col value format a55 select name,value from v\$parameter where name='background_dump_dest'; spool off exit XFF alert_path_num=$(grep -n "background_dump_dest" $tmp_dest/sqlplus.txt |awk -F":" '{print $1}') alert_path=$(cat $tmp_dest/sqlplus.txt |sed -n "${alert_path_num}p" | awk -F" " '{print $2}') first_day=`cat $tmp_dest/first_day.tmp` d_day=$(date +%e) if [ $d_day -lt 10 ] then ###########注意:以下两种方式选择其一################### #部分系统出现alert日志例如:Tue Aug 7 07:44:59 2012 last_day=$(date +%a)' '$(date +%b)'.*'$d_day'.*'$(date +%Y) #部分系统出现alert日志例如:Thu Jun 07 13:56:18 2012 n_day=`echo $d_day | awk 'gsub(/^ *| *$/,"")'` last_day=$(date +%a)' '$(date +%b)'.*0'$n_day'.*'$(date +%Y) else last_day=$(date|cut -c 1-10).*$(date +%Y) fi echo $last_day > $tmp_dest/first_day.tmp first_num=$(grep -n "$first_day" $alert_path/alert_$ORACLE_SID.log |head -1|awk -F":" '{print $1}') if [ -z "$first_num" ] then first_num=1 fi #修改$last_day为'.*',表示alert日志结尾 last_num=$(grep -n ".*" $alert_path/alert_$ORACLE_SID.log |tail -1|awk -F":" '{print $1}') point=1 export=$point echo "########################## checking alert_log start $first_day ########################## " sed -n "${first_num},${last_num}p" $alert_path/alert_$ORACLE_SID.log > $tmp_dest/trunc_alert cat $tmp_dest/trunc_alert|grep ORA-|while read line do line=$(echo "$line"|sed -e 's/\[/\\[/g;s/\]/\\]/g') time=$(grep -n "$line" $tmp_dest/trunc_alert | awk -F':' '{print $1}'|wc -l) if [ "$time" -ge 1 ] then num=$(grep -n "$line" $tmp_dest/trunc_alert|awk -F':' '{print $1}'|tail -1) #echo $num front_num=$((num-1)) back_num=$((num+9)) echo "++++++++++++++++++$point++++++++++++++++++++" sed -n "${front_num},${back_num}p" $tmp_dest/trunc_alert echo "++++++++++++++++++$point-End++++++++++++++++" point=$((point+1)) flag=1 else if [ -z "$time" ] then flag=0 fi fi done #rm $tmp_dest/trunc_alert #rm $tmp_dest/sqlplus.txt if [ " $flag " -eq 0 ] then echo "No errors in $first_day !" fi echo "########################## checking alert_log end $last_day ########################## "
检查结果
########################## checking alert_log start Fri Jan 27.*2012 ########################## ++++++++++++++++++1++++++++++++++++++++ Current log# 3 seq# 918 mem# 0: /opt/oracle/oradata/orcl/mcrm/redo03.log Tue Jan 31 22:00:22 2012 Errors in file /opt/oracle/admin/mcrm/bdump/mcrm_j001_23329.trc: ORA-01114: IO error writing block to file 201 (block # 550944) ORA-27072: File I/O error Linux-x86_64 Error: 28: No space left on device Additional information: 4 Additional information: 550944 Additional information: -1 ORA-01114: IO error writing block to file 201 (block # 550922) ORA-27072: File I/O error Additional information: 4 Additional information: 550922 ++++++++++++++++++1-End++++++++++++++++ ++++++++++++++++++2++++++++++++++++++++ Additional information: 550944 Additional information: -1 ORA-01114: IO error writing block to file 201 (block # 550922) ORA-27072: File I/O error Additional information: 4 Additional information: 550922 Additional information: 114688 Wed Feb 1 07:24:02 2012 Thread 1 advanced to log sequence 919 (LGWR switch) Current log# 1 seq# 919 mem# 0: /opt/oracle/oradata/orcl/mcrm/redo01.log Wed Feb 1 07:24:02 2012 Errors in file /opt/oracle/admin/mcrm/bdump/mcrm_arc1_3624.trc: ORA-19504: failed to create file "/opt/oracle/oradata/archivelog/1_918_741262746.dbf" ++++++++++++++++++2-End++++++++++++++++ ########################## checking alert_log end Sun Feb 12.*2012##########################
发表在 Linux
评论关闭