SlideShare a Scribd company logo
pstack, truss, etc 
By 
Riyaj Shamsudeen
©OraInternals Riyaj Shamsudeen 2 
Me 
 19 years using Oracle products/DBA 
 OakTable member 
 Oracle ACE Director 
 Certified DBA versions 7.0,7.3,8,8i,9i 
&10g 
 Specializes in RAC, performance tuning, 
Internals and E-business suite 
 Chief DBA with OraInternals 
 Co-author few books 
 Email: rshamsud@orainternals.com 
 Blog : orainternals.wordpress.com 
 Web: www.orainternals.com
Agenda 
 Truss with few examples. 
 Demos of truss (hopefully) 
 Proc tools intro: pmap, pfiles etc. 
 pstack
Truss 
 Truss is to trace UNIX system calls. 
 Use only if Oracle instrumentation is not sufficient 
to debug. 
 Nearly, all platforms provides tools similar to Truss 
utility in Solaris.
Truss - trace system calls and signals 
truss –p 28393 
… 
fstat(18, 0xFFBFA100) = 0 
lseek(17, 0x0216B000, SEEK_SET) = 0x0216B000 
write(17, "C8021686 )00 )D0000".., 4096) = 4096 
lseek(17, 0x0219D000, SEEK_SET) = 0x0219D000 
read(17, "00000101001FF 00".., 4096) = 4096
Truss 
Description: 
The truss utility traces the system calls and the signal process receives. 
Options: 
truss [-fcaeildD] [ - [tTvx] [!] syscall ,...] [ - [sS] [!] 
signal ,...] [ - [mM] [!] fault ,...] [ - [rw] [!] fd ,...] [ - 
[uU] [!] lib ,... : [:] [!] func ,...] [-o outfile] com- mand | 
-p pid... 
Solaris – truss 
Hpux- tusc 
Linux – strace 
AIX - truss
Truss 
To trace a process and print minimal information 
truss –p <pid> Example: truss –p 23898 
To trace a process, follow its children and print minimal information 
truss –f –p <pid> Example: truss –f –p 23898 
To trace a process, print timestamp and print minimal information 
truss –d –p <pid> Example: truss –d –p 23898 
To trace a process, send output to a file and print minimal information. 
truss –o /tmp/truss.out –p <pid> 
Example: truss –o /tmp/truss.out –d –p 23898
Truss – Word of caution 
At every system call, truss inspects the process. This 
*potentially* could slow down the process. 
So, Truss critical processes, only when it is necessary to 
do so.
Truss – Few outputs 
$ truss -d -E -p 1873 
Base time stamp: 1310009834.7781 [ Wed Jul 6 22:37:14 CDT 2011 ] 
0.0124 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 
0.1128 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 
0.1130 0.0000 mmap(0xFFFFFD7FFC1DE000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE| 
MAP_FIXED, 7, 0) = 0xFFFFFD7FFC1DE000 
0.2132 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 
0.3138 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 
0.4142 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 
0.5146 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 
0.6150 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 
0.7163 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 
0.8181 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 
Time stamp displacement 
From base timestamp. 
Seconds.fraction of sec 
Elapsed time in the system call. 
Semtimedop is the call used by the database processes to sleep 
Waiting for an event or timer expiry.
PMON behavior 
… 
0.7998 0.0002 open("/proc/1456/psinfo", O_RDONLY) = 40 
0.7998 0.0000 read(40, "0000201000B00500".., 416) = 416 
0.7999 0.0001 close(40) = 0 
0.7999 0.0000 open("/proc/1458/psinfo", O_RDONLY) = 40 
0.7999 0.0000 read(40, "0000201000B20500".., 416) = 416 
0.8000 0.0001 close(40) = 0 
0.8000 0.0000 open("/proc/1462/psinfo", O_RDONLY) = 40 
0.8001 0.0001 read(40, "0000202000B60500".., 416) = 416 
0.8001 0.0000 close(40) = 0 
… 
PMON is checking the status of database connection processes. 
This is how PMON identifies dead process to cleanup.
PMON – detect killed process 
… 
20.8818 0.0000 open("/proc/2372/psinfo", O_RDONLY) Err#2 ENOENT 
20.8826 0.0008 pollsys(0x0EA992B0, 3, 0xFFFFFD7FFFDFAFD0, 0x00000000) = 0 
20.8828 0.0002 write(42, "04 Z00060000000".., 1114) = 1114 
20.8838 0.0010 write(37, "04 Z00060000000".., 1114) = 1114 
20.8843 0.0005 pollsys(0x0EA992B0, 3, 0xFFFFFD7FFFDFB0E0, 0x00000000) = 2 
Process 2372 was killed and ENOENT thrown. PMON 
detected the process death and cleaned up the resources.
DBWR truss 
… 
$ truss -d -D -p 1473 |more 
Base time stamp: 1327357172.8340 [ Mon Jan 23 16:19:32 CST 2012 ] 
… 
/1:semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) (sleeping...) 
/1:3.2222 3.0003 semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) Err#11 EAGAIN 
… 
/1:semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) (sleeping...) 
/1:6.2228 3.0004 semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) Err#11 EAGAIN 
… 
/1:semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) (sleeping...) 
/1:9.2372 3.0143 semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) Err#11 EAGAIN 
… 
Semtimedop call is used by DBWR to sleep for 3 seconds waiting on 
semaphore. Wakesup at semaphore activity or timeout.
Foreground reads 
… 
13.2066 0.0001 pread(256, "06A20098 AC001A9 . 50".., 8192, 0x14030000) = 8192 
13.3202 0.0001 pread(261, "06A200C6 ?C001 P . 50".., 8192, 0x1418C000) = 8192 
13.3215 0.0000 pread(262, "06A200 3 EC00101 . 50".., 8192, 0x14666000) = 8192 
13.3250 0.0000 pread(257, "06A20099 >C001C6 * 50".., 8192, 0x14532000) = 8192 
13.3618 0.0001 pread(257, "06A200CE FC00101 . 50".., 8192, 0x1479C000) = 8192 
13.4259 0.0001 pread(263, "06A200 B BC001CD . 50".., 8192, 0x16384000) = 8192 
… 
Foreground process reads 8K blocks from the disk in to buffer 
cache. Approximately, 0.1ms per read. 
Demo: trussprocess.ksh, dbf_seq_gen.sql
DB startup 
ps –ef|grep oracle 
truss -d -E -f -o /tmp/dbstart.lst -p 2522 
4.8050 0.0000 shmget(IPC_PRIVATE, 4194304, 0660) = 58 
4.8051 0.0000 shmat(58, 0, IPC_ALLOC) = 
0xFFFFFD7FFC600000 
4.8051 0.0000 shmctl(58, IPC_RMID, 0) = 0 
4.8054 0.0000 shmget(3433015348, 536879104, 0660|IPC_CREAT|IPC_EXCL) = 59 
4.8055 0.0000 shmget(3433015349, 0, 0) Err#2 ENOENT 
4.8055 0.0000 shmget(3433015350, 0, 0) Err#2 ENOENT 
4.8055 0.0000 shmget(3433015351, 0, 0) Err#2 ENOENT 
4.8059 0.0004 shmat(59, 0x60000000, IPC_ALLOC) = 0x60000000 
A sqlplus connection process was TRUSSed to get all system calls with –f flag. 
Demo: startup db 
A Shared memory segment is created for SGA.
Shared memory segment 
ipcs –ma 
Shared Memory: 
T ID KEY ... CGROUP NATTCH SEGSZ 
m 59 0xcc9fa834... Oinstall 54 536879104 
M 1 0xea42bf0c... oinstall 37 285220864 
Shared memory segment was created with that shmget call, 59 shm id. 
Demo: startup db 
0xcc9fa834 = 3433015348 
4.8054 0.0000 shmget(3433015348, 536879104, 0660|IPC_CREAT|IPC_EXCL) = 59
PMON startup 
2522 is sqlplus connection process, a 
double fork to pmon pid 2540 
2522: 6.4786 0.0024 fork1() = 2538 
2538: 6.4786 0.0000 fork1() (returning as child ...)= 2522 
2538: 6.4812 0.0000 getpid() = 2538 [2522] 
2538: 6.4819 0.0000 lwp_self() = 1 
.. 
2538: 6.4823 0.0000 close(21) = 0 
2538: 6.4824 0.0000 schedctl() = 0xFFFFFD7FFDDEE000 
2538: 6.4831 0.0006 fork1() = 2540 
2540: 6.4831 0.0000 fork1() (returning as child ...) = 2538 
$strings /proc/2540/psinfo 
Oracle 
ora_pmon_solrac2
PMON attach 
2522 is sqlplus connection process, a 
double fork creates PMON pid 2540 
2540: 6.5195 0.0000 shmget(3433015348, 0, 0) = 59 
2540: 6.5195 0.0000 shmctl(59, IPC_STAT, 0xFFFFFD7FFFDFEA40) = 0 
2540: 6.5196 0.0000 shmat(59, 0, 0) = 0xFFFFFD7FDCA00000 
2540: 6.5197 0.0000 shmdt(0xFFFFFD7FDCA00000) = 0 
2540: 6.5197 0.0000 shmget(3433015349, 0, 0) Err#2 ENOENT 
2540: 6.5198 0.0000 shmget(3433015350, 0, 0) Err#2 ENOENT 
2540: 6.5198 0.0000 shmget(3433015351, 0, 0) Err#2 ENOENT 
2540: 6.5200 0.0002 shmat(59, 0x60000000, IPC_ALLOC) = 0x60000000 
PMON process attached to the shared memory segment 
through a shmat call.
Connection creation 
1432 is the listener process. Double 
fork creating a connection. 
1432/1: 4.9712 0.0006 fork1() = 5002 
5002: 4.9711 0.0000 fork1() (returning as child ...) = 1432 
5002: 4.9763 0.0000 getpid() = 5002 [1432] 
… 
5002: 4.9791 0.0004 fork1() = 5004 
5004: 4.9791 0.0000 fork1() (returning as child ...) = 5002 
5004: 4.9820 0.0000 getpid() = 5004 [5002] 
… 
5004: 4.9860 0.0000 setsid() Err#1 EPERM 
5004: 4.9880 0.0019 execve("/u02/app/oracle/product/11.2.0/ 
dbhome_2/bin/oracle", 0x004DA7A0, 0x006FDD80) argc= 2 
Oracle binary executed to create oracle process.
Linux 
Strace is the equivalent in Linux. 
-tt is to print the timestamp with microseconds. 
-T is to print the time spent in the system call. 
$strace -ttT -p 5164 
Process 5164 attached - interrupt to quit 
09:34:35.710183 poll([{fd=27, events=POLLIN|POLLRDNORM}, {fd=29, 
events=POLLIN|POLLRDNORM}], 2, 3000) = 0 (Timeout) <3.000425> 
09:34:38.711308 getrusage(RUSAGE_SELF, {ru_utime={0, 10998}, ru_stime={0, 
69989}, ...}) = 0 <0.000174> 
09:34:38.711756 getrusage(RUSAGE_SELF, {ru_utime={0, 10998}, ru_stime={0, 
69989}, ...}) = 0 <0.000174> 
09:34:38.712285 open("/proc/5166/stat", O_RDONLY) = 28 <0.000154> 
09:34:38.712684 read(28, "5166 (oracle) S 1 5166 5166 0 -1"..., 999) = 226 
<0.000182> 
09:34:38.713081 close(28) = 0 <0.000168> 
09:34:38.713455 open("/proc/5170/stat", O_RDONLY) = 28 <0.000180> 
09:34:38.713835 read(28, "5170 (oracle) S 1 5170 5170 0 -1"..., 999) = 225 
<0.000176> 
09:34:38.714216 close(28) = 0 <0.000174> 
Read of 226 bytes took 1.82 ms at 09:34:38.712684
AIX & HP 
 Truss is available in AIX & HP too. 
 In HP-UX, truss is called tusc; Usually, there are 
soft links to tusc named truss. 
 man pages on truss or tusc should give all options 
available. 
In AIX, -E flag, which is very useful is not available.
truss & pfiles 
Truss: 
write(18, " 9 8 7 1 0 o b jn <".., 21) = 21 
fstat(18, 0xFFBFA058) = 0 
write(18, " 9 8 7 2 0 R > >n s".., 18) = 18 
Pfiles: 
 pfiles can be used to associate this file ids with file names. 
 Pfiles lists the files currently opened by a process. In few 
unix platform, this can be achieved by lsof command 
also.
pfiles 
Using these device numbers and 
Inode numbers, file names can be mapped. 
pfiles 28393 
28393: ar60runb P_CONC_REQUEST_ID=2452107 STARTDATE='012006' 
ENDDATE='122006' 
Current rlimit: 4096 file descriptors 
0: S_IFIFO mode:0000 dev:272,0 ino:7325504 uid:11175 gid:100 size:0 
... 
17: S_IFREG mode:0644 dev:233,63004 ino:895242 uid:11175 gid:100 size: 
102522880 
O_RDWR|O_CREAT|O_TRUNC 
18: S_IFREG mode:0644 dev:233,63004 ino:895305 uid:11175 gid:100 size: 
25491841 
O_RDWR|O_CREAT|O_TRUNC 
This is the file_id 
In the truss output 
This is the device id 
Of the form minor,major 
Inode number
Pfiles & proc tools 
Many tools available, aka proc tools 
pflags, pcred, pldd, psig, pstack, pfiles, pwdx, 
pstop, prun, pwait, ptree, ptime 
WARNINGS 
The following proc tools stop their target processes while inspecting them 
and reporting the results: pfiles, pldd, pmap, and pstack. 
A process can do nothing while it is stopped. Stopping a heavily used 
process in a production environment, even for a short amount of time, can 
cause severe bottlenecks ..
pmap 
 Process memory need to be monitored and pmap command can 
give a breakdown of process memory. 
 Useful in Oracle environments to differentiate SGA and PGA of 
a connection process. 
 Some information is cryptic though. 
In AIX, this tool is named as procmap 
In Linux, & HP-UX, pmap is available
pmap <pid> 
$ pmap -x 2540 |more 
2540: ora_pmon_solrac2 
Pmap prints a Nice memory map 
of the Process. Various heaps and 
Stacks are printed here 
Address Kbytes RSS Anon Locked Mode Mapped File 
0000000000400000 232736 37864 - - r-x-- oracle 
000000000E757000 1424 476 144 - rw--- oracle 
000000000E8BB000 156 32 32 - rw--- oracle 
000000000E8E2000 1972 1132 1124 - rw--- [ heap ] 
0000000060000000 526336 321508 - - rwxs- [ dism 
shmid=0x3b ] 
FFFFFD7FFCAA0000 64 - - - rwx-- [ anon ] 
FFFFFD7FFCABE000 72 8 8 - rw--- [ anon ] 
FFFFFD7FFCAD0000 64 12 12 - rw--- [ anon ] 
FFFFFD7FFCAE0000 64 20 20 - rw--- [ anon ] 
.. 
---------------- ---------- ---------- ---------- ---------- 
total Kb 780044 368316 2072 - 
Total memory foot print 
Also printed.
pmap of pmon 
Pmap –xs <pid> 
... 
-s flag prints Hardware Address 
Translation. 
Address Kbytes RSS ... Pgsz Mode Mapped File 
000000000EACF000 16 - - - rw--- [ heap ] 
0000000060000000 2048 2048 4K rwxs- [ dism shmid=0x7 ] 
0000000060200000 378880 174080 - rwxs- [ dism shmid=0x7 ] 
0000000077400000 4096 4096 4K rwxs- [ dism shmid=0x7 ] 
0000000077800000 12288 12288 - rwxs- [ dism shmid=0x7 ] 
0000000078400000 4096 4096 4K rwxs- [ dism shmid=0x7 ] 
0000000078800000 12288 12288 - rwxs- [ dism shmid=0x7 ] 
0000000079400000 2048 2048 4K rwxs- [ dism shmid=0x7 ] 
0000000079600000 2048 2048 rwxs- [ dism shmid=0x7 ] 
0000000079800000 10240 10240 4K rwxs- [ dism shmid=0x7 ] 
000000007A200000 4096 4096 - rwxs- [ dism shmid=0x7 ] 
000000007A600000 6144 6144 4K rwxs- [ dism shmid=0x7 ] 
000000007AC00000 2048 2048 - rwxs- [ dism shmid=0x7 ] 
000000007AE00000 2048 2048 4K rwxs- [ dism shmid=0x7 ] 
… 
---------------- ---------- ---------- ---------- ---------- 
total Kb 781064 377672 
Shared memory segment that can 
grow or shrink.
pmap 
#! /bin/ksh 
pid=$1 
(( cnt=1000 )) 
while [[ $cnt -gt 0 ]]; 
do 
date 
pmap -x $pid 
pstack $pid 
echo $cnt 
(( cnt=cnt-1 )) 
sleep 10 
done 
A small shell script, to dump Memory map 
and stack of a process, in a loop, 
every 10 seconds.
pmap 
Address Kbytes RSS Anon Locked Mode Mapped File 
00010000 72 72 - - r-x-- java 
00030000 16 16 16 - rwx-- java 
00034000 8744 8680 8680 - rwx-- [ heap ] 
77980000 1224 1048 - - r--s- dev:273,2000 ino:104403 
77CFA000 24 24 24 - rw--R [ anon ] 
... 
FF39A000 8 8 8 - rwx-- libthread.so.1 
FF3A0000 8 8 - - r-x-- libc_psr.so.1 
FF3B0000 184 184 - - r-x-- ld.so.1 
FF3EE000 8 8 8 - rwx-- ld.so.1 
FF3F0000 8 8 8 - rwx-- ld.so.1 
FF3FA000 8 8 8 - rwx-- libdl.so.1 
FFB80000 24 - - - ----- [ anon ] 
FFBF0000 64 64 64 - rw--- [ stack ] 
-------- ------- ------- ------- ------- 
total Kb 182352 65568 26360 - 
Process initially started with 
a memory usage of 182MB
pmap 
Address Kbytes RSS Anon Locked Mode Mapped File 
00010000 72 72 - - r-x-- java 
00030000 16 16 16 - rwx-- java 
00034000 8808 8720 8720 - rwx-- [ heap ] 
77980000 1224 1048 - - r--s- dev:273,2000 ino:104403 
77CFA000 24 24 24 - rw--R [ anon ] 
77F7A000 24 24 24 - rw--R [ anon ] 
78000000 72 72 72 - rwx-- [ anon ] 
78012000 64 64 64 - rwx-- [ anon ] 
7814C000 144 144 144 - rwx-- [ anon ] 
78170000 8 8 8 - rwx-- [ anon ] 
78172000 8 8 8 - rwx-- [ anon ] 
78174000 8 8 8 - rwx-- [ anon ] 
78176000 104 104 104 - rwx-- [ anon ] 
.. 
FF3F0000 8 8 8 - rwx-- ld.so.1 
FF3FA000 8 8 8 - rwx-- libdl.so.1 
FFB80000 24 - - - ----- [ anon ] 
FFBF0000 64 64 64 - rw--- [ stack ] 
-------- ------- ------- ------- ------- 
total Kb 281040 210736 171528 -
YATC (Yet Another Test Case) 
Program is running for many hours. Recently there was a minor 
code change to the program. 
Demo: testcase2.sql
pstack $pstack 2544 
2544: oraclesolrac1 (DESCRIPTION=(LOCAL=YES) 
(ADDRESS=(PROTOCOL=beq))) 
000000000ab1418f pevm_SUBSTR () + 12f 
000000000aad49bf pfrinstr_SUBSTR () + 5f 
000000000aac5880 pfrrun_no_tool () + 40 
000000000aac6a6f pfrrun () + 4df 
000000000ab2e3fa plsql_run () + 2ea 
000000000aaa4a83 peicnt () + 143 
000000000a0fba56 kkxexe () + 216 
000000000447b5c7 opiexe () + 2757 
0000000004d54695 kpoal8 () + ce5 
0000000004472693 opiodr () + 433 
0000000008e67f69 ttcpip () + 599 
000000000444cfc0 opitsk () + 600 
000000000445bb75 opiino () + 675 
0000000004472693 opiodr () + 433 
0000000004441f4e opidrv () + 32e 
0000000005672197 sou2o () + 57 
000000000159eac9 opimai_real () + 219 
000000000568f2de ssthrdmain () + 14e 
000000000159e89b main () + cb 
000000000159e67c ???????? ()
pstack 
In AIX, this tool is named as procstack 
2544: oraclesolrac2 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
000000000ab135cc pevm_MOVC_i () + 5c 
000000000aac9c9e pfrinstr_MOVC () + 2e 
000000000aac5880 pfrrun_no_tool () + 40 
000000000aac6a6f pfrrun () + 4df 
000000000ab2e3fa plsql_run () + 2ea 
000000000aaa4a83 peicnt () + 143 
… 
2544: oraclesolrac2 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
00000000091a2a3b kghuwrlength () + 4b 
0000000009e348f3 plsm0vc_rsz () + 43 
000000000ab141ca pevm_SUBSTR () + 16a 
000000000aad49bf pfrinstr_SUBSTR () + 5f 
000000000aac5880 pfrrun_no_tool () + 40 
000000000aac6a6f pfrrun () + 4df 
000000000ab2e3fa plsql_run () + 2ea 
… 
2544: oraclesolrac2 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
000000000ab26125 pevm_icd_call_common () + c5 
000000000aacb5e3 pfrinstr_BCAL () + 53 
000000000aac5880 pfrrun_no_tool () + 40 
000000000aac6a6f pfrrun () + 4df 
000000000ab2e3fa plsql_run () + 2ea 
000000000aaa4a83 peicnt () + 143...
Oradebug short_stack 
 Oradebug short_stack also can be used to get process stack. 
 Example: 
SQL> oradebug setmypid 
Statement processed. 
SQL> oradebug short_stack 
ksedsts()+1123<-ksdxfstk()+33<-ksdxen_int()+5127<-ksdxen()+14<- 
opiodr()+1075<-ttcpip()+1433<-opitsk()+1536<-opiino()+1653<-opiodr() 
+1075<-opidrv()+814<-sou2o()+87<-opimai_real()+537<-ssthrdmain() 
+334<-main()+203<-_start()+108 
SQL> oradebug short_stack 
 ksedsts()+1123<-ksdxfstk()+33<-ksdxen_int()+5127<-ksdxen()+14<- 
opiodr()+1075<-ttcpip()+1433<-opitsk()+1536<-opiino()+1653<-opiodr() 
+1075<-opidrv()+814<-sou2o()+87<-opimai_real()+537<-ssthrdmain() 
+334<-main()+203<-_start()+108 
SQL>
Thank you for attending! 
If you like this presentation, you will love my 
2-part intensive, online RAC webinar. 
http://www.orainternals.com/training/ 
advanced-rac-training 
Week Dates Time 
Week1 March 26-30 8AM – 2PM PDT 
Week 2 April 9-13 8AM - 2PM PDT 
©OraInternals Riyaj Shamsudeen 34

More Related Content

PDF
Deep review of LMS process
Riyaj Shamsudeen
 
PDF
Chasing the optimizer
Mauro Pagano
 
PDF
A deep dive about VIP,HAIP, and SCAN
Riyaj Shamsudeen
 
PDF
Essential Linux Commands for DBAs
Gokhan Atil
 
PDF
initramfsについて
Kazuhiro Nishiyama
 
PPT
UKOUG, Oracle Transaction Locks
Kyle Hailey
 
PPT
Sga internals
sergkosko
 
PDF
Understanding oracle rac internals part 2 - slides
Mohamed Farouk
 
Deep review of LMS process
Riyaj Shamsudeen
 
Chasing the optimizer
Mauro Pagano
 
A deep dive about VIP,HAIP, and SCAN
Riyaj Shamsudeen
 
Essential Linux Commands for DBAs
Gokhan Atil
 
initramfsについて
Kazuhiro Nishiyama
 
UKOUG, Oracle Transaction Locks
Kyle Hailey
 
Sga internals
sergkosko
 
Understanding oracle rac internals part 2 - slides
Mohamed Farouk
 

What's hot (20)

PPT
Oracle 10g Performance: chapter 02 aas
Kyle Hailey
 
PDF
Oracle Deep Internal 1 (ver.2)
EXEM
 
PPTX
Oracle ASM Training
Vigilant Technologies
 
PDF
Oracle RAC Internals - The Cache Fusion Edition
Markus Michalewicz
 
PDF
Tanel Poder - Scripts and Tools short
Tanel Poder
 
PPT
Your tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
John Kanagaraj
 
PDF
AWR Ambiguity: Performance reasoning when the numbers don't add up
John Beresniewicz
 
PDF
DB Time, Average Active Sessions, and ASH Math - Oracle performance fundamentals
John Beresniewicz
 
PPT
Ash masters : advanced ash analytics on Oracle
Kyle Hailey
 
PDF
Exadata master series_asm_2020
Anil Nair
 
PDF
Seastore: Next Generation Backing Store for Ceph
ScyllaDB
 
PDF
Oracle Performance Tuning Fundamentals
Enkitec
 
PDF
Oracle Clusterware Node Management and Voting Disks
Markus Michalewicz
 
PDF
Oracle RAC 12c Practical Performance Management and Tuning OOW13 [CON8825]
Markus Michalewicz
 
PDF
Rac 12c optimization
Riyaj Shamsudeen
 
PDF
Whitepaper: Where did my CPU go?
Kristofferson A
 
PDF
New Generation Oracle RAC Performance
Anil Nair
 
PDF
Average Active Sessions - OaktableWorld 2013
John Beresniewicz
 
PDF
Introduction to Spark Internals
Pietro Michiardi
 
PDF
Oracle Latch and Mutex Contention Troubleshooting
Tanel Poder
 
Oracle 10g Performance: chapter 02 aas
Kyle Hailey
 
Oracle Deep Internal 1 (ver.2)
EXEM
 
Oracle ASM Training
Vigilant Technologies
 
Oracle RAC Internals - The Cache Fusion Edition
Markus Michalewicz
 
Tanel Poder - Scripts and Tools short
Tanel Poder
 
Your tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
John Kanagaraj
 
AWR Ambiguity: Performance reasoning when the numbers don't add up
John Beresniewicz
 
DB Time, Average Active Sessions, and ASH Math - Oracle performance fundamentals
John Beresniewicz
 
Ash masters : advanced ash analytics on Oracle
Kyle Hailey
 
Exadata master series_asm_2020
Anil Nair
 
Seastore: Next Generation Backing Store for Ceph
ScyllaDB
 
Oracle Performance Tuning Fundamentals
Enkitec
 
Oracle Clusterware Node Management and Voting Disks
Markus Michalewicz
 
Oracle RAC 12c Practical Performance Management and Tuning OOW13 [CON8825]
Markus Michalewicz
 
Rac 12c optimization
Riyaj Shamsudeen
 
Whitepaper: Where did my CPU go?
Kristofferson A
 
New Generation Oracle RAC Performance
Anil Nair
 
Average Active Sessions - OaktableWorld 2013
John Beresniewicz
 
Introduction to Spark Internals
Pietro Michiardi
 
Oracle Latch and Mutex Contention Troubleshooting
Tanel Poder
 
Ad

Similar to pstack, truss etc to understand deeper issues in Oracle database (20)

PDF
Debugging Ruby
Aman Gupta
 
PDF
Debugging Ruby Systems
Engine Yard
 
PDF
Profiling of Oracle Function Calls
Enkitec
 
PDF
Performance tweaks and tools for Linux (Joe Damato)
Ontico
 
PDF
Osol Pgsql
Emanuel Calvo
 
PPT
Tracing Parallel Execution (UKOUG 2006)
Doug Burns
 
PDF
Learning Dtrace
JeongHun Byeon
 
PDF
Parallel Computing with R
Peter Solymos
 
PDF
Velocity 2017 Performance analysis superpowers with Linux eBPF
Brendan Gregg
 
PDF
USENIX ATC 2017 Performance Superpowers with Enhanced BPF
Brendan Gregg
 
PPTX
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
PROIDEA
 
PDF
A close encounter_with_real_world_and_odd_perf_issues
Riyaj Shamsudeen
 
PDF
Sysdig
gnosek
 
PDF
Explain this!
Fabio Telles Rodriguez
 
PDF
Доклад Антона Поварова "Go in Badoo" с Golang Meetup
Badoo Development
 
PDF
Reverse engineering Swisscom's Centro Grande Modem
Cyber Security Alliance
 
DOCX
metadatacoreProperties.xmlModel2015-07-13T030104Zthua3267th.docx
ARIV4
 
PPTX
OpenWorld Sep14 12c for_developers
Connor McDonald
 
PDF
Aplicações 10x a 100x mais rápida com o postgre sql
Fabio Telles Rodriguez
 
PPTX
Oracle Basics and Architecture
Sidney Chen
 
Debugging Ruby
Aman Gupta
 
Debugging Ruby Systems
Engine Yard
 
Profiling of Oracle Function Calls
Enkitec
 
Performance tweaks and tools for Linux (Joe Damato)
Ontico
 
Osol Pgsql
Emanuel Calvo
 
Tracing Parallel Execution (UKOUG 2006)
Doug Burns
 
Learning Dtrace
JeongHun Byeon
 
Parallel Computing with R
Peter Solymos
 
Velocity 2017 Performance analysis superpowers with Linux eBPF
Brendan Gregg
 
USENIX ATC 2017 Performance Superpowers with Enhanced BPF
Brendan Gregg
 
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
PROIDEA
 
A close encounter_with_real_world_and_odd_perf_issues
Riyaj Shamsudeen
 
Sysdig
gnosek
 
Explain this!
Fabio Telles Rodriguez
 
Доклад Антона Поварова "Go in Badoo" с Golang Meetup
Badoo Development
 
Reverse engineering Swisscom's Centro Grande Modem
Cyber Security Alliance
 
metadatacoreProperties.xmlModel2015-07-13T030104Zthua3267th.docx
ARIV4
 
OpenWorld Sep14 12c for_developers
Connor McDonald
 
Aplicações 10x a 100x mais rápida com o postgre sql
Fabio Telles Rodriguez
 
Oracle Basics and Architecture
Sidney Chen
 
Ad

More from Riyaj Shamsudeen (12)

PDF
Rac introduction
Riyaj Shamsudeen
 
PDF
Riyaj: why optimizer_hates_my_sql_2010
Riyaj Shamsudeen
 
PDF
Riyaj real world performance issues rac focus
Riyaj Shamsudeen
 
PDF
Redo internals ppt
Riyaj Shamsudeen
 
PDF
Debunking myths about_redo_ppt
Riyaj Shamsudeen
 
PDF
Advanced RAC troubleshooting: Network
Riyaj Shamsudeen
 
PDF
Demystifying cost based optimization
Riyaj Shamsudeen
 
PDF
Px execution in rac
Riyaj Shamsudeen
 
PDF
Advanced rac troubleshooting
Riyaj Shamsudeen
 
PDF
A kind and gentle introducton to rac
Riyaj Shamsudeen
 
PDF
Performance tuning a quick intoduction
Riyaj Shamsudeen
 
PPT
Dbms plan - A swiss army knife for performance engineers
Riyaj Shamsudeen
 
Rac introduction
Riyaj Shamsudeen
 
Riyaj: why optimizer_hates_my_sql_2010
Riyaj Shamsudeen
 
Riyaj real world performance issues rac focus
Riyaj Shamsudeen
 
Redo internals ppt
Riyaj Shamsudeen
 
Debunking myths about_redo_ppt
Riyaj Shamsudeen
 
Advanced RAC troubleshooting: Network
Riyaj Shamsudeen
 
Demystifying cost based optimization
Riyaj Shamsudeen
 
Px execution in rac
Riyaj Shamsudeen
 
Advanced rac troubleshooting
Riyaj Shamsudeen
 
A kind and gentle introducton to rac
Riyaj Shamsudeen
 
Performance tuning a quick intoduction
Riyaj Shamsudeen
 
Dbms plan - A swiss army knife for performance engineers
Riyaj Shamsudeen
 

Recently uploaded (20)

PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PDF
The Future of Artificial Intelligence (AI)
Mukul
 
PDF
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
PPTX
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
PDF
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PPTX
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
PDF
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
PPTX
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
PDF
Software Development Methodologies in 2025
KodekX
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
The Future of AI & Machine Learning.pptx
pritsen4700
 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
The Future of Artificial Intelligence (AI)
Mukul
 
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
Software Development Methodologies in 2025
KodekX
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 

pstack, truss etc to understand deeper issues in Oracle database

  • 1. pstack, truss, etc By Riyaj Shamsudeen
  • 2. ©OraInternals Riyaj Shamsudeen 2 Me  19 years using Oracle products/DBA  OakTable member  Oracle ACE Director  Certified DBA versions 7.0,7.3,8,8i,9i &10g  Specializes in RAC, performance tuning, Internals and E-business suite  Chief DBA with OraInternals  Co-author few books  Email: [email protected]  Blog : orainternals.wordpress.com  Web: www.orainternals.com
  • 3. Agenda  Truss with few examples.  Demos of truss (hopefully)  Proc tools intro: pmap, pfiles etc.  pstack
  • 4. Truss  Truss is to trace UNIX system calls.  Use only if Oracle instrumentation is not sufficient to debug.  Nearly, all platforms provides tools similar to Truss utility in Solaris.
  • 5. Truss - trace system calls and signals truss –p 28393 … fstat(18, 0xFFBFA100) = 0 lseek(17, 0x0216B000, SEEK_SET) = 0x0216B000 write(17, "C8021686 )00 )D0000".., 4096) = 4096 lseek(17, 0x0219D000, SEEK_SET) = 0x0219D000 read(17, "00000101001FF 00".., 4096) = 4096
  • 6. Truss Description: The truss utility traces the system calls and the signal process receives. Options: truss [-fcaeildD] [ - [tTvx] [!] syscall ,...] [ - [sS] [!] signal ,...] [ - [mM] [!] fault ,...] [ - [rw] [!] fd ,...] [ - [uU] [!] lib ,... : [:] [!] func ,...] [-o outfile] com- mand | -p pid... Solaris – truss Hpux- tusc Linux – strace AIX - truss
  • 7. Truss To trace a process and print minimal information truss –p <pid> Example: truss –p 23898 To trace a process, follow its children and print minimal information truss –f –p <pid> Example: truss –f –p 23898 To trace a process, print timestamp and print minimal information truss –d –p <pid> Example: truss –d –p 23898 To trace a process, send output to a file and print minimal information. truss –o /tmp/truss.out –p <pid> Example: truss –o /tmp/truss.out –d –p 23898
  • 8. Truss – Word of caution At every system call, truss inspects the process. This *potentially* could slow down the process. So, Truss critical processes, only when it is necessary to do so.
  • 9. Truss – Few outputs $ truss -d -E -p 1873 Base time stamp: 1310009834.7781 [ Wed Jul 6 22:37:14 CDT 2011 ] 0.0124 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 0.1128 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 0.1130 0.0000 mmap(0xFFFFFD7FFC1DE000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE| MAP_FIXED, 7, 0) = 0xFFFFFD7FFC1DE000 0.2132 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 0.3138 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 0.4142 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 0.5146 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 0.6150 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 0.7163 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN 0.8181 0.0000 semtimedop(7, 0xFFFFFD7FFFDF9328, 1, 0xFFFFFD7FFFDF9340) Err#11 EAGAIN Time stamp displacement From base timestamp. Seconds.fraction of sec Elapsed time in the system call. Semtimedop is the call used by the database processes to sleep Waiting for an event or timer expiry.
  • 10. PMON behavior … 0.7998 0.0002 open("/proc/1456/psinfo", O_RDONLY) = 40 0.7998 0.0000 read(40, "0000201000B00500".., 416) = 416 0.7999 0.0001 close(40) = 0 0.7999 0.0000 open("/proc/1458/psinfo", O_RDONLY) = 40 0.7999 0.0000 read(40, "0000201000B20500".., 416) = 416 0.8000 0.0001 close(40) = 0 0.8000 0.0000 open("/proc/1462/psinfo", O_RDONLY) = 40 0.8001 0.0001 read(40, "0000202000B60500".., 416) = 416 0.8001 0.0000 close(40) = 0 … PMON is checking the status of database connection processes. This is how PMON identifies dead process to cleanup.
  • 11. PMON – detect killed process … 20.8818 0.0000 open("/proc/2372/psinfo", O_RDONLY) Err#2 ENOENT 20.8826 0.0008 pollsys(0x0EA992B0, 3, 0xFFFFFD7FFFDFAFD0, 0x00000000) = 0 20.8828 0.0002 write(42, "04 Z00060000000".., 1114) = 1114 20.8838 0.0010 write(37, "04 Z00060000000".., 1114) = 1114 20.8843 0.0005 pollsys(0x0EA992B0, 3, 0xFFFFFD7FFFDFB0E0, 0x00000000) = 2 Process 2372 was killed and ENOENT thrown. PMON detected the process death and cleaned up the resources.
  • 12. DBWR truss … $ truss -d -D -p 1473 |more Base time stamp: 1327357172.8340 [ Mon Jan 23 16:19:32 CST 2012 ] … /1:semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) (sleeping...) /1:3.2222 3.0003 semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) Err#11 EAGAIN … /1:semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) (sleeping...) /1:6.2228 3.0004 semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) Err#11 EAGAIN … /1:semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) (sleeping...) /1:9.2372 3.0143 semtimedop(7, 0xFFFFFD7FFFDFD188, 1, 0xFFFFFD7FFFDFD1A0) Err#11 EAGAIN … Semtimedop call is used by DBWR to sleep for 3 seconds waiting on semaphore. Wakesup at semaphore activity or timeout.
  • 13. Foreground reads … 13.2066 0.0001 pread(256, "06A20098 AC001A9 . 50".., 8192, 0x14030000) = 8192 13.3202 0.0001 pread(261, "06A200C6 ?C001 P . 50".., 8192, 0x1418C000) = 8192 13.3215 0.0000 pread(262, "06A200 3 EC00101 . 50".., 8192, 0x14666000) = 8192 13.3250 0.0000 pread(257, "06A20099 >C001C6 * 50".., 8192, 0x14532000) = 8192 13.3618 0.0001 pread(257, "06A200CE FC00101 . 50".., 8192, 0x1479C000) = 8192 13.4259 0.0001 pread(263, "06A200 B BC001CD . 50".., 8192, 0x16384000) = 8192 … Foreground process reads 8K blocks from the disk in to buffer cache. Approximately, 0.1ms per read. Demo: trussprocess.ksh, dbf_seq_gen.sql
  • 14. DB startup ps –ef|grep oracle truss -d -E -f -o /tmp/dbstart.lst -p 2522 4.8050 0.0000 shmget(IPC_PRIVATE, 4194304, 0660) = 58 4.8051 0.0000 shmat(58, 0, IPC_ALLOC) = 0xFFFFFD7FFC600000 4.8051 0.0000 shmctl(58, IPC_RMID, 0) = 0 4.8054 0.0000 shmget(3433015348, 536879104, 0660|IPC_CREAT|IPC_EXCL) = 59 4.8055 0.0000 shmget(3433015349, 0, 0) Err#2 ENOENT 4.8055 0.0000 shmget(3433015350, 0, 0) Err#2 ENOENT 4.8055 0.0000 shmget(3433015351, 0, 0) Err#2 ENOENT 4.8059 0.0004 shmat(59, 0x60000000, IPC_ALLOC) = 0x60000000 A sqlplus connection process was TRUSSed to get all system calls with –f flag. Demo: startup db A Shared memory segment is created for SGA.
  • 15. Shared memory segment ipcs –ma Shared Memory: T ID KEY ... CGROUP NATTCH SEGSZ m 59 0xcc9fa834... Oinstall 54 536879104 M 1 0xea42bf0c... oinstall 37 285220864 Shared memory segment was created with that shmget call, 59 shm id. Demo: startup db 0xcc9fa834 = 3433015348 4.8054 0.0000 shmget(3433015348, 536879104, 0660|IPC_CREAT|IPC_EXCL) = 59
  • 16. PMON startup 2522 is sqlplus connection process, a double fork to pmon pid 2540 2522: 6.4786 0.0024 fork1() = 2538 2538: 6.4786 0.0000 fork1() (returning as child ...)= 2522 2538: 6.4812 0.0000 getpid() = 2538 [2522] 2538: 6.4819 0.0000 lwp_self() = 1 .. 2538: 6.4823 0.0000 close(21) = 0 2538: 6.4824 0.0000 schedctl() = 0xFFFFFD7FFDDEE000 2538: 6.4831 0.0006 fork1() = 2540 2540: 6.4831 0.0000 fork1() (returning as child ...) = 2538 $strings /proc/2540/psinfo Oracle ora_pmon_solrac2
  • 17. PMON attach 2522 is sqlplus connection process, a double fork creates PMON pid 2540 2540: 6.5195 0.0000 shmget(3433015348, 0, 0) = 59 2540: 6.5195 0.0000 shmctl(59, IPC_STAT, 0xFFFFFD7FFFDFEA40) = 0 2540: 6.5196 0.0000 shmat(59, 0, 0) = 0xFFFFFD7FDCA00000 2540: 6.5197 0.0000 shmdt(0xFFFFFD7FDCA00000) = 0 2540: 6.5197 0.0000 shmget(3433015349, 0, 0) Err#2 ENOENT 2540: 6.5198 0.0000 shmget(3433015350, 0, 0) Err#2 ENOENT 2540: 6.5198 0.0000 shmget(3433015351, 0, 0) Err#2 ENOENT 2540: 6.5200 0.0002 shmat(59, 0x60000000, IPC_ALLOC) = 0x60000000 PMON process attached to the shared memory segment through a shmat call.
  • 18. Connection creation 1432 is the listener process. Double fork creating a connection. 1432/1: 4.9712 0.0006 fork1() = 5002 5002: 4.9711 0.0000 fork1() (returning as child ...) = 1432 5002: 4.9763 0.0000 getpid() = 5002 [1432] … 5002: 4.9791 0.0004 fork1() = 5004 5004: 4.9791 0.0000 fork1() (returning as child ...) = 5002 5004: 4.9820 0.0000 getpid() = 5004 [5002] … 5004: 4.9860 0.0000 setsid() Err#1 EPERM 5004: 4.9880 0.0019 execve("/u02/app/oracle/product/11.2.0/ dbhome_2/bin/oracle", 0x004DA7A0, 0x006FDD80) argc= 2 Oracle binary executed to create oracle process.
  • 19. Linux Strace is the equivalent in Linux. -tt is to print the timestamp with microseconds. -T is to print the time spent in the system call. $strace -ttT -p 5164 Process 5164 attached - interrupt to quit 09:34:35.710183 poll([{fd=27, events=POLLIN|POLLRDNORM}, {fd=29, events=POLLIN|POLLRDNORM}], 2, 3000) = 0 (Timeout) <3.000425> 09:34:38.711308 getrusage(RUSAGE_SELF, {ru_utime={0, 10998}, ru_stime={0, 69989}, ...}) = 0 <0.000174> 09:34:38.711756 getrusage(RUSAGE_SELF, {ru_utime={0, 10998}, ru_stime={0, 69989}, ...}) = 0 <0.000174> 09:34:38.712285 open("/proc/5166/stat", O_RDONLY) = 28 <0.000154> 09:34:38.712684 read(28, "5166 (oracle) S 1 5166 5166 0 -1"..., 999) = 226 <0.000182> 09:34:38.713081 close(28) = 0 <0.000168> 09:34:38.713455 open("/proc/5170/stat", O_RDONLY) = 28 <0.000180> 09:34:38.713835 read(28, "5170 (oracle) S 1 5170 5170 0 -1"..., 999) = 225 <0.000176> 09:34:38.714216 close(28) = 0 <0.000174> Read of 226 bytes took 1.82 ms at 09:34:38.712684
  • 20. AIX & HP  Truss is available in AIX & HP too.  In HP-UX, truss is called tusc; Usually, there are soft links to tusc named truss.  man pages on truss or tusc should give all options available. In AIX, -E flag, which is very useful is not available.
  • 21. truss & pfiles Truss: write(18, " 9 8 7 1 0 o b jn <".., 21) = 21 fstat(18, 0xFFBFA058) = 0 write(18, " 9 8 7 2 0 R > >n s".., 18) = 18 Pfiles:  pfiles can be used to associate this file ids with file names.  Pfiles lists the files currently opened by a process. In few unix platform, this can be achieved by lsof command also.
  • 22. pfiles Using these device numbers and Inode numbers, file names can be mapped. pfiles 28393 28393: ar60runb P_CONC_REQUEST_ID=2452107 STARTDATE='012006' ENDDATE='122006' Current rlimit: 4096 file descriptors 0: S_IFIFO mode:0000 dev:272,0 ino:7325504 uid:11175 gid:100 size:0 ... 17: S_IFREG mode:0644 dev:233,63004 ino:895242 uid:11175 gid:100 size: 102522880 O_RDWR|O_CREAT|O_TRUNC 18: S_IFREG mode:0644 dev:233,63004 ino:895305 uid:11175 gid:100 size: 25491841 O_RDWR|O_CREAT|O_TRUNC This is the file_id In the truss output This is the device id Of the form minor,major Inode number
  • 23. Pfiles & proc tools Many tools available, aka proc tools pflags, pcred, pldd, psig, pstack, pfiles, pwdx, pstop, prun, pwait, ptree, ptime WARNINGS The following proc tools stop their target processes while inspecting them and reporting the results: pfiles, pldd, pmap, and pstack. A process can do nothing while it is stopped. Stopping a heavily used process in a production environment, even for a short amount of time, can cause severe bottlenecks ..
  • 24. pmap  Process memory need to be monitored and pmap command can give a breakdown of process memory.  Useful in Oracle environments to differentiate SGA and PGA of a connection process.  Some information is cryptic though. In AIX, this tool is named as procmap In Linux, & HP-UX, pmap is available
  • 25. pmap <pid> $ pmap -x 2540 |more 2540: ora_pmon_solrac2 Pmap prints a Nice memory map of the Process. Various heaps and Stacks are printed here Address Kbytes RSS Anon Locked Mode Mapped File 0000000000400000 232736 37864 - - r-x-- oracle 000000000E757000 1424 476 144 - rw--- oracle 000000000E8BB000 156 32 32 - rw--- oracle 000000000E8E2000 1972 1132 1124 - rw--- [ heap ] 0000000060000000 526336 321508 - - rwxs- [ dism shmid=0x3b ] FFFFFD7FFCAA0000 64 - - - rwx-- [ anon ] FFFFFD7FFCABE000 72 8 8 - rw--- [ anon ] FFFFFD7FFCAD0000 64 12 12 - rw--- [ anon ] FFFFFD7FFCAE0000 64 20 20 - rw--- [ anon ] .. ---------------- ---------- ---------- ---------- ---------- total Kb 780044 368316 2072 - Total memory foot print Also printed.
  • 26. pmap of pmon Pmap –xs <pid> ... -s flag prints Hardware Address Translation. Address Kbytes RSS ... Pgsz Mode Mapped File 000000000EACF000 16 - - - rw--- [ heap ] 0000000060000000 2048 2048 4K rwxs- [ dism shmid=0x7 ] 0000000060200000 378880 174080 - rwxs- [ dism shmid=0x7 ] 0000000077400000 4096 4096 4K rwxs- [ dism shmid=0x7 ] 0000000077800000 12288 12288 - rwxs- [ dism shmid=0x7 ] 0000000078400000 4096 4096 4K rwxs- [ dism shmid=0x7 ] 0000000078800000 12288 12288 - rwxs- [ dism shmid=0x7 ] 0000000079400000 2048 2048 4K rwxs- [ dism shmid=0x7 ] 0000000079600000 2048 2048 rwxs- [ dism shmid=0x7 ] 0000000079800000 10240 10240 4K rwxs- [ dism shmid=0x7 ] 000000007A200000 4096 4096 - rwxs- [ dism shmid=0x7 ] 000000007A600000 6144 6144 4K rwxs- [ dism shmid=0x7 ] 000000007AC00000 2048 2048 - rwxs- [ dism shmid=0x7 ] 000000007AE00000 2048 2048 4K rwxs- [ dism shmid=0x7 ] … ---------------- ---------- ---------- ---------- ---------- total Kb 781064 377672 Shared memory segment that can grow or shrink.
  • 27. pmap #! /bin/ksh pid=$1 (( cnt=1000 )) while [[ $cnt -gt 0 ]]; do date pmap -x $pid pstack $pid echo $cnt (( cnt=cnt-1 )) sleep 10 done A small shell script, to dump Memory map and stack of a process, in a loop, every 10 seconds.
  • 28. pmap Address Kbytes RSS Anon Locked Mode Mapped File 00010000 72 72 - - r-x-- java 00030000 16 16 16 - rwx-- java 00034000 8744 8680 8680 - rwx-- [ heap ] 77980000 1224 1048 - - r--s- dev:273,2000 ino:104403 77CFA000 24 24 24 - rw--R [ anon ] ... FF39A000 8 8 8 - rwx-- libthread.so.1 FF3A0000 8 8 - - r-x-- libc_psr.so.1 FF3B0000 184 184 - - r-x-- ld.so.1 FF3EE000 8 8 8 - rwx-- ld.so.1 FF3F0000 8 8 8 - rwx-- ld.so.1 FF3FA000 8 8 8 - rwx-- libdl.so.1 FFB80000 24 - - - ----- [ anon ] FFBF0000 64 64 64 - rw--- [ stack ] -------- ------- ------- ------- ------- total Kb 182352 65568 26360 - Process initially started with a memory usage of 182MB
  • 29. pmap Address Kbytes RSS Anon Locked Mode Mapped File 00010000 72 72 - - r-x-- java 00030000 16 16 16 - rwx-- java 00034000 8808 8720 8720 - rwx-- [ heap ] 77980000 1224 1048 - - r--s- dev:273,2000 ino:104403 77CFA000 24 24 24 - rw--R [ anon ] 77F7A000 24 24 24 - rw--R [ anon ] 78000000 72 72 72 - rwx-- [ anon ] 78012000 64 64 64 - rwx-- [ anon ] 7814C000 144 144 144 - rwx-- [ anon ] 78170000 8 8 8 - rwx-- [ anon ] 78172000 8 8 8 - rwx-- [ anon ] 78174000 8 8 8 - rwx-- [ anon ] 78176000 104 104 104 - rwx-- [ anon ] .. FF3F0000 8 8 8 - rwx-- ld.so.1 FF3FA000 8 8 8 - rwx-- libdl.so.1 FFB80000 24 - - - ----- [ anon ] FFBF0000 64 64 64 - rw--- [ stack ] -------- ------- ------- ------- ------- total Kb 281040 210736 171528 -
  • 30. YATC (Yet Another Test Case) Program is running for many hours. Recently there was a minor code change to the program. Demo: testcase2.sql
  • 31. pstack $pstack 2544 2544: oraclesolrac1 (DESCRIPTION=(LOCAL=YES) (ADDRESS=(PROTOCOL=beq))) 000000000ab1418f pevm_SUBSTR () + 12f 000000000aad49bf pfrinstr_SUBSTR () + 5f 000000000aac5880 pfrrun_no_tool () + 40 000000000aac6a6f pfrrun () + 4df 000000000ab2e3fa plsql_run () + 2ea 000000000aaa4a83 peicnt () + 143 000000000a0fba56 kkxexe () + 216 000000000447b5c7 opiexe () + 2757 0000000004d54695 kpoal8 () + ce5 0000000004472693 opiodr () + 433 0000000008e67f69 ttcpip () + 599 000000000444cfc0 opitsk () + 600 000000000445bb75 opiino () + 675 0000000004472693 opiodr () + 433 0000000004441f4e opidrv () + 32e 0000000005672197 sou2o () + 57 000000000159eac9 opimai_real () + 219 000000000568f2de ssthrdmain () + 14e 000000000159e89b main () + cb 000000000159e67c ???????? ()
  • 32. pstack In AIX, this tool is named as procstack 2544: oraclesolrac2 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 000000000ab135cc pevm_MOVC_i () + 5c 000000000aac9c9e pfrinstr_MOVC () + 2e 000000000aac5880 pfrrun_no_tool () + 40 000000000aac6a6f pfrrun () + 4df 000000000ab2e3fa plsql_run () + 2ea 000000000aaa4a83 peicnt () + 143 … 2544: oraclesolrac2 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 00000000091a2a3b kghuwrlength () + 4b 0000000009e348f3 plsm0vc_rsz () + 43 000000000ab141ca pevm_SUBSTR () + 16a 000000000aad49bf pfrinstr_SUBSTR () + 5f 000000000aac5880 pfrrun_no_tool () + 40 000000000aac6a6f pfrrun () + 4df 000000000ab2e3fa plsql_run () + 2ea … 2544: oraclesolrac2 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 000000000ab26125 pevm_icd_call_common () + c5 000000000aacb5e3 pfrinstr_BCAL () + 53 000000000aac5880 pfrrun_no_tool () + 40 000000000aac6a6f pfrrun () + 4df 000000000ab2e3fa plsql_run () + 2ea 000000000aaa4a83 peicnt () + 143...
  • 33. Oradebug short_stack  Oradebug short_stack also can be used to get process stack.  Example: SQL> oradebug setmypid Statement processed. SQL> oradebug short_stack ksedsts()+1123<-ksdxfstk()+33<-ksdxen_int()+5127<-ksdxen()+14<- opiodr()+1075<-ttcpip()+1433<-opitsk()+1536<-opiino()+1653<-opiodr() +1075<-opidrv()+814<-sou2o()+87<-opimai_real()+537<-ssthrdmain() +334<-main()+203<-_start()+108 SQL> oradebug short_stack  ksedsts()+1123<-ksdxfstk()+33<-ksdxen_int()+5127<-ksdxen()+14<- opiodr()+1075<-ttcpip()+1433<-opitsk()+1536<-opiino()+1653<-opiodr() +1075<-opidrv()+814<-sou2o()+87<-opimai_real()+537<-ssthrdmain() +334<-main()+203<-_start()+108 SQL>
  • 34. Thank you for attending! If you like this presentation, you will love my 2-part intensive, online RAC webinar. http://www.orainternals.com/training/ advanced-rac-training Week Dates Time Week1 March 26-30 8AM – 2PM PDT Week 2 April 9-13 8AM - 2PM PDT ©OraInternals Riyaj Shamsudeen 34