Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> RE: OT : kernel using 75% of CPU

RE: OT : kernel using 75% of CPU

From: Guy Hammond <guy.hammond_at_avt.co.uk>
Date: Tue, 28 Aug 2001 10:18:35 -0700
Message-ID: <F001.00379DE8.20010828094529@fatcity.com>

Hi
Jerry,
<SPAN

class=315352916-28082001> 
<SPAN

class=315352916-28082001>Firstly, the kernel is not a process in the conventional sense. It is basically a set of library functions. One of these is the scheduler, which gets called every time slice, by the timer in the hardware, in order to decide which actual process to run next. Responding to interrupts is the only way in which a kernel could be considered to be running. The kernel exists to provide services to processes, every time a process makes a "system call", for example to perform I/O, this is invoking a function within the kernel to actually "do" it - i.e. an application might call read() then read() in the kernel would handle the business of talking to the device driver and actually doing the reading of the data from the disk (for example).
<SPAN

class=315352916-28082001> 
The
CPU states line is showing you *where* the code is running. If it's in "user" then the CPU is spending its time running code in "user land" - probably computational code, stuff that's actually in the application. If the state is "kernel", then it means that your application is making lots of system calls, and the kernel level routines are doing the work.
<SPAN

class=315352916-28082001> 
<SPAN

class=315352916-28082001>Incidentally, this is why Java is a good language on the server - it does much of its real work in fast kernel space, and little of it in the slow virtual machine. A busy Oracle will also spend a bit of time in kernel space, doing I/O and networking, accessing shared memory, etc.

<SPAN

class=315352916-28082001> 
<SPAN

class=315352916-28082001>Looking at your "top" output, you have a high system load, but your user processes aren't using much CPU, but kernel time is high. This suggests that your processes are spending time waiting for the kernel to do something or other for them, load being the size of the run queue (all the processes that are ready to run but not actually on the CPU). Are you actually experiencing performance problems? If so, you need to look at what the system is doing using "sar" "vmstat" and "iostat". One thing to watch out for is that "top" is a primitive tool. Notice how large all your Oracle processes are? That is because top isn't smart enough to realize that they're all connected to shared memory, it's counting each one as being process size + SGA. So your processes and your memory in use don't add up. Also top deals poorly with LWPs (threads) - are you using MTS? You could simply be seeing threads stacking up as they wait for network.
<SPAN

class=315352916-28082001> 
<SPAN

class=315352916-28082001>HTH,
<SPAN

class=315352916-28082001> 
<SPAN

class=315352916-28082001>g
<SPAN

class=315352916-28082001> 

  <FONT face=Tahoma
  size=2>-----Original Message-----From: Jerry C   [mailto:usidba_at_YAHOO.COM]Sent: Tuesday, August 28, 2001 4:20   PMTo: Multiple recipients of list ORACLE-LSubject: OT :   kernel using 75% of CPU
  Hi there,
   
  I have a Sun e4500, running Solaris 2.7   and Oracle 8.1.7.1.0. Everything looks normal from a database   perspective, but when I run "top" it show the kernel being very   hog-like:
   
  load averages: 14.38, 15.18,

  15.18                                     
  07:16:21126 processes: 118 sleeping, 4 running, 4 on cpuCPU   states:  0.6% idle, 26.6% user, 72.8% kernel,  0.0% iowait,    0.0% swapMemory: 4096M real, 63M free, 216M swap in use, 5310M swap   free
   
    PID USERNAME THR PRI NICE 
  SIZE   RES STATE   TIME    CPU 
  COMMAND 2286 oracle     1   
  0    0 1844M 1814M run     9:44 13.90% 
  oracle11068 oracle     1   
  0    0 2056K 1536K cpu0    0:02  1.53% 
  top11333 oracle     1   0    

  0 1150M 1124M cpu1    0:01  1.39% oracle 5944
  oracle     1  40    0 1820M 1789M 
  sleep  14:40  1.36% oracle 4797 
  root       1  50    0 2112K 
  1248K sleep   6:01  1.36% top11346 
  oracle     1   0    0  
  110M   92M cpu0    0:01  1.26% oracle11114 
  oracle     1   0    0 1009M  
  984M cpu1    0:00  0.66% oracle11157 
  oracle     1   0    0 1009M  

  984M run     0:00  0.63% oracle11368
  oracle     1  33    0 1794M 1765M 
  sleep   0:00  0.29% oracle19558 
  oracle     1  60    0 1797M 1751M 

  sleep  78:28  0.28% oracle19554 oracle       1  60    0 1794M 1751M sleep  38:05  0.20%
  oracle11366 oracle     1  55    0 
  1793M 1763M sleep   0:00  0.19% oracle11292 
  oracle     1  26    2 2008K 1424K 

  run     0:00  0.19% dsql
   
  Any ideas on what I, as a lowly DBA,
  would be able to check? It's a bit out of my area and I'm   stumped...
   
   
  Thanks!
   
  <FONT face="Courier New"
size=2>Jerry Received on Tue Aug 28 2001 - 12:18:35 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US