Did this article resolve your question/issue?




« Go Back


TitleCalculating SEMMSL, SEMMNS and SEMMNU
URL NameP4741
Article Number000138948
EnvironmentProduct: Progress
Version: 7.x, 8.x
Product: OpenEdge
Version: 10.x, 11.x, 12.x
Other: Semaphores
Question/Problem Description
Calculation for semaphore kernel parameters required by OpenEdge databases
How to determine what to set for semaphores in the kernel

Steps to Reproduce
Clarifying Information
Error Message
Defect Number
Enhancement Number

Semaphore parameters:

  1. SEMMSL is the maximum number of semaphores allowed per semaphore identifier (semaphore set).
  2. SEMMNS is the total number of semaphores allowed for the system.
  3. SEMMNU is the maximum number of semaphore undo structures allowed for the system.
Semaphore calculation requirements for OpenEdge Databases:

These parameters are guidelines.  
  • A particular system or application may require increasing these limits as Progress/OpenEdge is not the only application or resource on a machine that makes use of semaphores. The values required by Progress must be added to the current kernel parameter values, they do not take into account the requirement of UNIX operating system and/or any other application that use shared memory and semaphore.
  • Refer to Operating Systems specific information for kernel tuning, for example:
    • you need to make sure that you have NPROC >= SEMMNU + 4
    •  Since a semaphore set can have the maximum number of SEMMSL semaphores per semaphore set, it is often recommended to set SEMOPM equal to SEMMSL.
    • there may be related changes in later versions which effect how semaphores are used by that OS, for example: Linux Database crashes when semaphores get removed 

  • Maximum of number of users for any database on the system (-n)  + number of servers  for any database on the system (-Mn) + 4
  • The number of semaphores within the semaphore set is determined by the -n and -Mn startup parameter for each database.
  • You need to include any Progress auxiliary process in the -n count, i.e. APWs, AIW,BIW, WDOG, AIMGT, RPLS replication process, online backup, extra PROMON sessions, etc. As we plan to utilize additional auxiliary process, we need to add more to the -n values to account for them. 
  • SEMMSL * the number of active databases 
  • Note additional semaphores allowed for the system wide may be required.
  • Set equal to one per Progress process connecting to a database. (each server process, self-service client, page writer, BI writer, AI writer, watchdog, PROSHUT, PROMON.
  • However, to avoid system errors we recommend to set SEMMNU = SEMMNS. Not all systems have the SEMMNU tunable parameter.
If parameters are not set correctly, OpenEdge will display an error message when it attempts to start an additional user or server.  

Semaphore limit exceeded
Less than minimum number of semaphores available (1130)
The above semaphore calculations relate to login-semaphores, when non-enterprise db licenses are used, additional semaphores are required for locking. Even with Enterprise database licenses, login semaphores are still used and less semaphores are used otherwise for locking when spin locks are enabled (-spin): Does Progress use semaphores on multi-processor machines?
Last Modified Date12/3/2021 5:30 PM
Disclaimer The origins of the information on this site may be internal or external to Progress Software Corporation (“Progress”). Progress Software Corporation makes all reasonable efforts to verify this information. However, the information provided is for your information only. Progress Software Corporation makes no explicit or implied claims to the validity of this information.

Any sample code provided on this site is not supported under any Progress support program or service. The sample code is provided on an "AS IS" basis. Progress makes no warranties, express or implied, and disclaims all implied warranties including, without limitation, the implied warranties of merchantability or of fitness for a particular purpose. The entire risk arising out of the use or performance of the sample code is borne by the user. In no event shall Progress, its employees, or anyone else involved in the creation, production, or delivery of the code be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the sample code, even if Progress has been advised of the possibility of such damages.