Here is a snapshot of the process statistics (
prstat
output) for the PeopleSoft application server processes running on a Solaris 10 system:PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
10864 psft 353M 235M sleep 60 10 0:13:42 1.5% PSAPPSRV/11
10855 psft 353M 235M sleep 2 10 0:13:55 1.5% PSAPPSRV/11
10846 psft 353M 235M sleep 3 10 0:14:04 1.5% PSAPPSRV/11
10870 psft 353M 235M sleep 0 10 0:13:50 1.5% PSAPPSRV/11
10873 psft 353M 235M sleep 1 10 0:13:57 1.4% PSAPPSRV/11
10852 psft 353M 235M sleep 0 10 0:13:57 1.4% PSAPPSRV/11
10858 psft 353M 235M sleep 60 10 0:13:47 1.3% PSAPPSRV/11
10849 psft 349M 231M cpu0 20 10 0:13:55 1.3% PSAPPSRV/11
10867 psft 353M 235M sleep 60 10 0:13:53 1.3% PSAPPSRV/11
10861 psft 349M 231M sleep 60 10 0:13:56 1.2% PSAPPSRV/11
Notice the number of LWPs (represented by NLWP in the snapshot) that are associated with each of those
PSAPPSRV
processes. Just by looking at the above snapshot, one may under the impression that the PSAPPSRV
(PeopleSoft Application Server process) is a multi-threaded process because it appears there are 11 worker threads actively processing the user requests.To dig a little deeper, Solaris provides the ability to check the statistics for each of the light-weight processes (LWPs) that are associated with a process (here I'm assuming that the intended audience can differentiate a process from a light-weight process). With the help of
-L
option of the prstat
, Solaris reports the statistics for each LWP in a given process. Let's have a close look at those stats.PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/LWPID
10864 psft 353M 235M cpu32 0 10 0:01:37 1.5% PSAPPSRV/1
10864 psft 353M 235M sleep 59 0 0:00:00 0.0% PSAPPSRV/11
10864 psft 353M 235M sleep 29 10 0:00:00 0.0% PSAPPSRV/10
10864 psft 353M 235M sleep 28 10 0:00:00 0.0% PSAPPSRV/9
10864 psft 353M 235M sleep 28 10 0:00:00 0.0% PSAPPSRV/8
10864 psft 353M 235M sleep 59 0 0:00:00 0.0% PSAPPSRV/7
10864 psft 353M 235M sleep 59 0 0:00:00 0.0% PSAPPSRV/6
10864 psft 353M 235M sleep 51 2 0:00:00 0.0% PSAPPSRV/5
10864 psft 353M 235M sleep 59 0 0:00:00 0.0% PSAPPSRV/4
10864 psft 353M 235M sleep 29 10 0:00:00 0.0% PSAPPSRV/3
10864 psft 353M 235M sleep 59 0 0:00:00 0.0% PSAPPSRV/2
Notice the PID in the first column. It confirms that the above snapshot is the process stats breakdown by LWPs for a given process. Now check the output under the
TIME
column. That column represents the cumulative execution time for the process -- LWP, in this case. Except for the LWP #1, the exec time for rest of the LWPs is zero i.e., even though the PSAPPSRV
process spawned 10 more LWPs, in reality they are not doing any work at all. When I tried to find the reason {from my counterpart at Oracle Corporation} for the creation of multiple LWPs, I was told that the multiple LWPs are a side effect of loading JRE(s) into the process address space during the run-time. Also it appears the PeopleSoft application server processes (PSAPPSRV
) can process only one user request (transaction) at a time. It is the limitation of the PeopleSoft Enterprise by design.So the bottomline is: PeopleSoft application server processes (
PSAPPSRV
) are not multi-threaded even though they appear to be multi-threaded from the operating system perspective.Before we conclude, make sure you understand that the discussion in this blog post applies only to the PeopleSoft application server processes,
PSAPPSRV
. You cannot generalize it to the whole PeopleSoft Enterprise. For example, application engine processes (PSAESRV
) that run under the control of the Process Scheduler are actually multi-threaded processes. However expanding the discussion around Process Scheduler/Application Engine is beyond the scope of this blog post.Acknowledgements:
Sanjay Goyal
________________
Technorati Tags:
Oracle | PeopleSoft | Architecture
No comments:
Post a Comment