Solaris 10 - Increasing Number of Processes Per User
We came across this problem when working with one of the ISV application. We were simulating workload for performance tests and realized that the load simulation tool was generating 30000+ processes/LWP. The load siluation tools was running on UltraSPARC T2 based system with Solaris 10 and 32 GB RAM.
Looked up the resources on the web for increasing the number of processes on Solaris 10 system on PER UID. Came across couple of blog entries (Giri Mandalika, Spiralbound.net) which provided good starting point but were not complete solution to our problem. We needed to increase the number of processesper user to more than current setting of 30000
bash-3.00# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 260000
pipe size (512 bytes, -p) 10
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 29995
virtual memory (kbytes, -v) unlimited
Trying to increase the "max user processes" would fail with the following error:
bash-3.00# ulimit -u 50000
bash: ulimit: max user processes: cannot modify limit: Invalid argument
bash-3.00#
After going through the Solaris 10 Tunable Guide for Process sizing learned that there are 5 related parameters related to process sizing.
maxusers - The maximum number of processes on the system, The number of quota structures held in the system. The size of the directory name look-up cache (DNLC)
reserved_procs - Specifies the number of system process slots to be reserved in the process table for processes with a UID of root
pidmax - Specifies the value of the largest possible process ID. Specifies the value of the largest possible process ID. Valid for Solaris 8 and later releases.
max_nprocs - Specifies the maximum number of processes that can be created on a system. Includes system processes and user processes. Any value specified in /etc/system is used in the computation of maxuprc.
maxuprc - Specifies the maximum number of processes that can be created on a system by any one user
Looked at the current values for these parameter:
bash-3.00# echo reserved_procs/D | mdb -k
reserved_procs:
reserved_procs: 5
bash-3.00# echo pidmax/D | mdb -k
pidmax:
pidmax: 30000
bash-3.00# echo maxusers/D | mdb -k
maxusers:
maxusers: 2048
bash-3.00#
bash-3.00# echo max_nprocs/D | mdb -k
max_nprocs:
max_nprocs: 30000
bash-3.00#
bash-3.00# echo maxuprc/D | mdb -k
maxuprc:
maxuprc: 29995
So, in order to set the max per user processes in this scenario, we were required to make the changes to "pidmax" (upper cap), maxusers, max_nprocs & maxuprc
Sample entries in /etc/system & reboot
set pidmax=60000
set maxusers = 4096
set maxuprc = 50000
set max_nprocs = 50000
After making the above entries, we were able to increase the max user processes to 50000.
bash-3.00# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 260000
pipe size (512 bytes, -p) 10
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 49995
virtual memory (kbytes, -v) unlimited
bash-3.00#
bash-3.00# echo reserved_procs/D | mdb -k
reserved_procs:
reserved_procs: 5
bash-3.00# echo pidmax/D | mdb -k
pidmax:
pidmax: 60000
bash-3.00# echo max_nprocs/D | mdb -k
max_nprocs:
max_nprocs: 50000
bash-3.00# echo maxuprc/D | mdb -k
maxuprc:
maxuprc: 50000
bash-3.00#
Note: If you are operating within the 30000 limit (default pidmax setting) the blog entry referred above seems to work fine. If you are looking at increasing the processes beyond 30000, it we need to make adjustment to other dependent parameters stated in this blog entry.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment