4.1 Tuning the ZENworks Primary Servers

Although with ZENworks the server settings are tuned during an upgrade or new installation, it is valuable to understand the default settings for your server and how you can further tune these settings if required. The table below shows the default values based on the memory installed in your server:

Primary Server RAM

HTTPS Tomcat Threads

Heap Memory

ZENAdminMgmt

ZENClientMgmt

ZENAdminMgmt

ZENClientMgmt

ZENLoader

8 GB

200

600

2 GB

4 GB

2 GB

12 GB

200

1000

3 GB

6 GB

3 GB

16 GB

200

1000

4 GB

8 GB

4 GB

To utilize the 64-bit JVM (Java Virtual Machine) of ZENworks to the best possible extent, you can increase the following values beyond the defaults:

4.1.1 Maximum HTTPS Tomcat Threads

ZENworks uses HTTPS threads to service all incoming configuration, authentication, content and collection requests. By default, the HTTPS thread count is set to 1000.

This value together dictates the maximum number of simultaneous web requests that the server will service. When these are exhausted, the server will begin returning a 503 error to agents indicating that it is busy. This will cause the busy retry logic to be executed. You can monitor the overall threads in use from the Diagnostics tab of the ZENworks Primary Server and, if necessary, adjust appropriately.

These values are found in the server.xml file in the following locations:

Windows

  • ZENAdminMgmt: %ZENSERVER_HOME%\services\zenadmin-mgmt\conf

  • ZENClientMgmt: %ZENSERVER_HOME%\services\zenclient-mgmt\conf

Linux

  • ZENAdminMgmt: /etc/opt/microfocus/zenworks/tomcat-conf/zenadmin-mgmt/

  • ZENClientMgmt: /etc/opt/microfocus/zenworks/tomcat-conf/zenclient-mgmt/

NOTE:Back up the server.xml before modifying the thread values. If you are restoring the backed-up file, ensure that you restart the service after restore.

To achieve further performance increases from your Primary Servers, you can change the thread values:

Thread Values on ZENworksAdminMgmt

  1. Open the server.xml file for the operating system on which the Primary Server is running.

  2. Locate the line with the text <Connector port="7443" and change the value for maxThreads as desired.

    As the ports in ZENworks can be customized, if you don’t find a connector on port 7443, search for the port number that you normally use to connect to ZENworks Control Center.

  3. Save the file.

  4. Restart the ZENworksAdminMgmt services again.

If you increase the number of threads, you will also want to monitor the Java heap usage of the ZENworksAdminMgmt service. If this begins to approach the allocated amount of memory, you will also want to look at increasing the heap size, or reducing the threads.

Thread Values on ZENworksClientMgmt

  1. Open the server.xml file for the operating system on which the Primary Server is running.

  2. Locate the line with the text <Connector port="443" and change the value for maxThreads as desired. You should consider increasing this number if the server is servicing a large number of configuration or authentication requests.

    As the ports in ZENworks can be customized, if you do not find a connector on port 7491, search for the port number in the range 7491 to 7600.

  3. Save the file.

  4. Restart the ZENworksClientMgmt service again.

If you increase the number of threads, you will also want to monitor the Java heap usage of the ZENworksClientMgmt service. If this begins to approach the allocated amount of memory, you will also want to look at increasing the heap size, or reducing the threads.

The status of the Primary Server can be Normal, Critical, Warning, or Disconnected. You can define the status of a Primary Server by configuring the health matrix. For steps to configure the health matrix, see “Configuring the Health Metrics for Primary Servers” in the ZENworks Diagnostics and Probe Guide.

4.1.2 Heap Memory Size for ZENworks Services

ZENworks uses the 64-bit JVM, so you can tune the Java memory allocations to allow ZENworks services to utilize more memory if required. The sample settings in the following procedures were tested in the engineering lab on a server with 16 GB of RAM.

Configuring the Maximum Heap Memory Size for ZENAdminManagement Service on a Linux Primary Server

The ZENAdminManagement service is the Tomcat instance used by the ZENworks Primary Server. It services agent requests, ZENworks Control Center, and the zenworks-setup page. If you find that ZENworks Server runs out of heap space, you can increase the heap size by doing the following:

  1. Using a Linux text editor such as vi or gedit, create or modify the /etc/opt/microfocus/zenworks/settings/zenadminsettings.sh file with the following content:

      JAVA_MIN_HEAP="-Xms1024m"
      JAVA_MAX_HEAP="-Xmx1024m"
      JAVA_MIN_PERM_SIZE="-XX:PermSize=128m"
      JAVA_MAX_PERM_SIZE="-XX:MaxPermSize=256m"
      JAVA_THREAD_STACK_SIZE="-Xss1m"

    IMPORTANT:Change the JAVA_MAX_HEAP value from -Xmx1024m to -Xmx<desired memory in MB>m. For example, -Xmx4096m to configure 4GB.

    You need to reserve RAM for the operating system, so change the values in increments that make sense.

  2. Save the file.

  3. Run the following command:

    chown zenworks:zenworks /etc/opt/microfocus/zenworks/settings/zenadminsettings.sh
    
  4. Restart the ZENAdminManagement service by running systemctl restart microfocus-zenadmin-mgmt.service.

Configuring the Maximum Heap Memory Size for ZENClientManagement Service on a Linux Primary Server

The ZENClientManagement service is the Tomcat instance used by the ZENworks Primary Server. It services agent requests, ZENworks Control Center, and the zenworks-setup page. If you find that ZENworks Server runs out of heap space, you can increase the heap size by doing the following:

  1. Stop the ZENworks services (ZENClientMgmt and ZENLoader).

  2. Using a Linux text editor such as vi or gedit, create or modify the /etc/opt/microfocus/zenworks/settings/zenclientsettings.sh file with the following content:

      JAVA_MIN_HEAP="-Xms1024m"
      JAVA_MAX_HEAP="-Xmx1024m"
      JAVA_MIN_PERM_SIZE="-XX:PermSize=128m"
      JAVA_MAX_PERM_SIZE="-XX:MaxPermSize=256m"
      JAVA_THREAD_STACK_SIZE="-Xss1m"

    IMPORTANT:Change the JAVA_MAX_HEAP value from -Xmx1024m to -Xmx<desired memory in MB>m. For example, -Xmx4096m to configure 4GB.

    You need to reserve RAM for the operating system, so change the values in increments that make sense.

  3. Save the file.

  4. Run the following commands:

    chown zenworks:zenworks /etc/opt/microfocus/zenworks/settings/zenclientsettings.sh
    
  5. Restart the ZENClientManagement service by running systemctl restart microfocus-zenclient-mgmt.service.

Configuring the Maximum Heap Memory Size for ZENworks Loader Service on a Linux Primary Server

The ZENworks Loader service is responsible for performing background operations such as subscribing to external zones, packaging content, storing collection data in the database, processing audit events, and much more. If you have a server that is doing a lot of these background tasks and you see the heap memory decrease for the ZENworks Loader service, you can increase the heap size by doing the following:

  1. Using a Linux text editor such as vi or gedit, create or modify the /etc/opt/microfocus/zenworks/settings/zenloadersettings.sh file with the following content:

    JAVA_MIN_HEAP="-Xms256m"
      JAVA_MAX_HEAP="-Xmx1024m"
    JAVA_MIN_PERM_SIZE="-XX:PermSize=128m"  JAVA_MAX_PERM_SIZE="-XX:MaxPermSize=128m"

    IMPORTANT:Change the JAVA_MAX_HEAP value from -Xmx1024m to -Xmx<desired memory in MB>m. For example, -Xmx4096m to configure 4GB.

    You need to reserve RAM for the operating system, so change the values in increments that make sense.

  2. Save the file.

  3. Run the following commands:

    chmod 755 and chown zenworks:zenworks /etc/opt/microfocus/zenworks/settings/zenloadersettings.sh

  4. Start the ZENworks Loader service by running systemctl restart microfocus-zenloader.service.

Configuring the Maximum Heap Memory Size for ZENworks JoinProxy Service on a Linux Primary Server

The ZENworks Join Proxy service handles the Remote Management requests from agents in a private network or outside the DMZ. By default, the maximum number of connections that a Join Proxy service can handle is 100 for a Primary Server and 1000 from a Satellite Server. If required, you can modify the number of connections. By increasing the number of connections, if you find that ZENjoinProxy runs out of heap space, you can increase the heap size by performing the following steps.

Perform the following steps on a Linux Primary Server to increase the heap space for the ZENJoinProxy service:

  1. Using a Linux text editor such as vi or gedit, open the systemd-zenjoinproxy file from the following location:

    /opt/microfocus/zenworks/lib/systemd/system/systemd-zenjoinproxy

  2. Modify the maximum heap space value from -Xmx512m to -Xmx<desired memory in MB>m.

    For example: -Xmx1024m to configure 1GB.

    NOTE:Before changing the value, ensure that you reserve enough RAM for the operating system.

  3. Save the file.

  4. Restart ZENworks Join Proxy service by running systemctl restart microfocus-zenjoinproxy.service.

Recommended Configuration:

Refer to the following table which provides an approximate reference while computing and configuring the maximum heap memory size on the Primary Server for the Join Proxy service.

Maximum Connections (to Join Proxy)

Remote Management (RM) Sessions

Max. Heap Memory Size (Approximate)

3000

50

1 GB

8000

50

2 GB

4500

100

2 GB

NOTE:1 Remote Management session is nearly equal to 30 Maximum Connections.

Configuring the Maximum Heap Memory Size for ZENworksAdminMgmt Service on a Windows Primary Server

The ZENworksAdminMgmt service is the Tomcat instance used by the ZENworks Primary Server. It services ZENworks Control Center. If you find that ZENworksAdminMgmt runs out of heap space, you can increase the heap size by doing the following:

  1. Stop the ZENworks services (ZENMonitor, and ZENLoader).

  2. Run ZENworksAdminMgmtWZENworksAdminMgmtw.

  3. On the Java tab, change the Maximum memory pool from 1024 to a higher value. For example, 4096.

    You need to reserve RAM for the operating system, so change the values in increments that make sense.

  4. Click Apply, then click OK.

  5. Restart the ZENworksAdminMgmt services.

Configuring the Maximum Heap Memory Size for ZENworksClientMgmt Service on a Windows Primary Server

The ZENworksClientMgmt service is the Tomcat instance used by the ZENworks Primary Server. It services agent requests, and the zenworks-setup page. If you find that ZENworksClientMgmt runs out of heap space, you can increase the heap size by doing the following:

  1. Run ZENworksClientMgmtw.

  2. On the Java tab, change the Maximum memory pool from 1024 to a higher value. For example, 4096.

    You need to reserve RAM for the operating system, so change the values in increments that make sense.

  3. Click Apply, then click OK.

  4. Restart the ZENworksClientMgmt services.

Configuring the Maximum Heap Memory Size for ZENworks Loader Service on a Windows Primary Server

The ZENworks Loader service is responsible for performing background operations such as subscribing to external zones, packaging content, storing collection data in the database, processing audit events and much more. If you have a server that is doing a lot of these background tasks and if you see the heap memory get low for the ZENworksLoader service, you can increase the heap size by doing the following:

  1. Run ZENworksLoaderw.

  2. On the Java tab, change the Maximum memory pool from 1024 to a desired value. For example 4096.

    You need to reserve RAM for the operating system, so change the values in increments that make sense.

  3. Click Apply, then click OK.

  4. Restart the ZENworksLoader services.

Configuring the Maximum Heap Memory Size for ZENworks JoinProxy Service on a Windows Primary Server

The ZENworks Join Proxy service handles the Remote Management requests from agents in a private network or outside DMZ. By default, the maximum number of connections that a Join Proxy service can handle is 100 for a Primary Server and 1000 from a Satellite Server. If required, you can modify the number of connections. By increasing the number of connections, if you find that ZENjoinProxy runs out of heap space, you can increase the heap size by performing the following steps.

Perform the following steps on a Windows Primary Server to increase the heap space for the ZENworksJoinProxy service:

  1. Run ZENworksJoinProxyw in the command prompt.

  2. In the ZENworks Join Proxy Properties window, click the Java tab.

  3. Modify the Maximum memory pool from 1024 to a higher value.

    NOTE:Before changing the value, ensure that you reserve enough RAM for the operating system.

  4. Click Apply or OK to save the changes.

  5. Restart the ZENworksServer,ZENworksLoader and ZENworks Join Proxy services.

Recommended Configuration:

Refer to the following table which provides an approximate reference while computing and configuring the maximum heap memory size on the Primary Server for the Join Proxy service.

Maximum Connections (to Join Proxy)

Remote Management (RM) Sessions

Max. Heap Memory Size (Approximate)

3000

50

1 GB

8000

50

2 GB

4500

100

2 GB

NOTE:Remote Management session is nearly equal to 30 Maximum Connections.

4.1.3 Limiting Heap Memory Size for ZENServer Web Requests

In large ZENworks deployment zones, if you experience “OutofMemoryExceptions” frequently, you can limit the web service requests coming to the ZENworks primary server by configuring maximum permitted heap limit.

To configure maximum permitted heap limit:

  1. Stop the ZENworks services on the Primary Servers.

  2. Add the following line within the Engine properties of the server.xml file:

    <Valve className="com.novell.zenworks.tomcat.ZENRequestValve" debug="false" maxUsedHeapPercent="90"/>

    Path for server.xml on Linux: /opt/microfocus/zenworks/share/tomcat/conf/

    Path for server.xml on Windows: %ZENSERVER_HOME%\services\zenserver\conf

    NOTE:It is not recommended to configure the maxUsedHeapPercent value for the ZENworks Primary Server, which is used for accessing ZENworks Control Center. This could result in blank pages during peak loads that exceed the configured permitted heap limit.

  3. You can enable valve debug logging by configuring the debug value as True.

  4. Start the ZENworks services.

    Valve logs can be found at following location:

    Linux: /opt/microfocus/zenworks/share/tomcat/logs/

    Windows: %ZENSERVER_HOME%\services\zenserver\logs\

NOTE:When the heap memory usage by the ZENServer process reaches the maximum permitted heap, web service requests coming from managed devices will be rejected with status 503. You can find the message Request would exceed the maximum permitted heap limit in valve debug logs.

Even after configuring the maxUsedHeapPercent value, if you observe that the ZENworks Primary Server is not responsive or is in a busy state for a long time, revert the configuration and consult the Global Technical Support.

4.1.4 Connection Pool Tuning for the ZENworks Primary Server

Database connections are often expensive to create because of the overhead of establishing a network connection and initializing a database connection session in the back-end database. Hence, ZENworks uses the c3p0 library which helps in maintaining a pool of connections to the database to perform at optimal levels. Like any other pooling mechanism, you will need to tune the connections to your needs. This section will explain the various options available for your tuning needs.

Understanding the Different ZENworks Connection Pools

You can tune each of the following connection pools independently:

  • ZENLoader Connection Pool: This connection pool is used for most of the ZENworks Loader functions that require access to the database, including storing inventory database; recording content repository data during packaging, patch subscriptions, zone-to-zone subscriptions, and all other tasks performed by the ZENworks Loader; and storing the device message and status.

  • ZENLoader Batch Connection Pool: This connection pool is used by ZENworks Loader for storing device message and status information such as install or launch bundle status. This status is stored in batches and, as such, uses a separate connection pool.

  • ZENAdminMgmt Connection Pool: This connection pool is used by the ZENAdminMgmt process to retrieve data from the database. This is most heavily used by Configuration and Authentication requests.

  • ZENClientMgmt Connection Pool: This connection pool is used by the ZENClientMgmt process to retrieve data from the database. This is most heavily used by Configuration and Authentication requests.

  • InvUI Connection Pool: This connection pool is used when browsing inventory data on devices or when running canned reports from ZENworks Control Center.

  • Audit ZENServer Connection Pool: This connection pool is used by the ZENworks Server process to retrieve data from the Audit database. This is used mainly by ZENworks Control Center servers.

  • Audit ZENLoader Connection Pool: This connection pool is used by the ZENworks Server process to store data in the Audit database. This is mainly used by Collection servers.

ZENworks Database Connection Pool Parameters (zdm.xml)

ZENworks provides the following parameters for tuning the connection pools used to connect to the ZENworks database.

  • MinPoolSize: This value specifies the minimum number of connections available for a given connection pool. For instance, if this value is set to 5, then the connection pool will always have at least 5 connections to the database.

  • ZENAdminMgmt.MinPoolSize: This value specifies the minimum number of connections available for a ZENAdminMgmt connection pool. If this value is not set, then the MinPoolSize parameter value is used to determine the minimum ZENAdminMgmt connection pool size.

  • ZENClientMgmt.MinPoolSize: This value specifies the minimum number of connections available for a ZENClientMgmt connection pool. If this value is not set, then the MinPoolSize parameter value is used to determine the minimum ZENClientMgmt connection pool size.

  • ZENLoader.MinPoolSize: This value specifies the minimum number of connections available for the ZENLoader connection pool. If this value is not set, then the MinPoolSize parameter value is used to determine the minimum ZENLoader connection pool size.

  • Batch.MinPoolSize: This value specifies the minimum number of connections available for a the ZENLoader batch connection pool. If this value is not set then the MinPoolSize parameter value is used to determine the minimum ZENLoader batch connection pool size.

  • MaxPoolSize: This value specifies the maximum number of connections available for a given connection pool. The pool size will grow dynamically from the minimum size to the maximum size as required by the requests being made to the server. Once the request volume reduces, the number of threads will reduce after the specified period of time.

  • ZENAdminMgmt.MaxPoolSize: This value specifies the maximum number of connections available to the ZENAdminMgmt connection pool. If this value is not set, the maximum number is determined by the MaxPoolSize parameter.

  • ZENClientMgmt.MaxPoolSize: This value specifies the maximum number of connections available to the ZENClientMgmt connection pool. If this value is not set, the maximum number is determined by the MaxPoolSize parameter.

  • ZENLoader.MaxPoolSize: This value specifies the maximum number of connections available to the ZENLoader connection pool. If this value is not set, then the maximum number is determined by the MaxPoolSize parameter.

  • Batch.MaxPoolSize: This value specifies the maximum number of connections available to the ZENLoader batch connection pool. If this value is not set, then the maximum number is determined by the MaxPoolSize parameter.

  • MaxIdleTimeExcessConnections: This value is set in number of seconds and controls how long before the server should end unused connections. This is useful for situations such as first thing in the morning when a large number of clients are logging in, causing a lot of database activity. After this initial login, the number of requests typically drops dramatically. After the specified number of seconds passes, the database connections that are no longer required for active work will be closed.

  • ZENAdminMgmt.MaxIdleTimeExcessConnections: This value controls the amount of time before the excess threads used by the ZENAdminMgmt connection pool. If this value is not present in the zdm.xml file, then the MaxIdleTimeExcessConnections value is used to determine this value.

  • ZENClientMgmt.MaxIdleTimeExcessConnections: This value controls the amount of time before the excess threads used by the ZENClientMgmt connection pool. If this value is not present in the zdm.xml file, then the MaxIdleTimeExcessConnections value is used to determine this value.

  • ZENLoader.MaxIdleTimeExcessConnections: This value controls the amount of time before the excess threads are used by the ZENLoader connection pool. If this value is not present in the zdm.xml file, then the MaxIdleTimeExcessConnections value is used to determine this value.

  • Batch.MaxIdleTimeExcessConnections: This value controls the amount of time before the excess threads are used by the ZENLoader batch connection pool. If this value is not present in the zdm.xml file, then the MaxIdleTimeExcessConnections value is used to determine this value.

The columns to the right of the parameter identify the recommended parameter value based on the role(s) the server will be performing in your organization. If a server will be acting in multiple roles, you should plan on setting the parameter to the highest value in the row.

NOTE:The values indicated with n/a are not required to be set for the servers performing the corresponding role. The default values are sufficient.

XML Parameter

Config/Auth Server

Collection Server

ZCC Server

Other/Default

MinPoolSize

5

5

5

5

ZENAdminMgmt.MinPoolSize

5

n/a

n/a

n/a

ZENClientMgmt.MinPoolSize

5

n/a

n/a

n/a

ZENLoader.MinPoolSize

5

n/a

n/a

n/a

Batch.MinPoolSize

5

n/a

n/a

n/a

MaxPoolSize

900*

10

100

100

ZENAdminMgmt.MaxPoolSize

900*

10

10

n/a

ZENClientMgmt.MaxPoolSize

900*

10

10

n/a

ZENLoader.MaxPoolSize

30

30

10

n/a

Batch.MaxPoolSize

45

45

10

n/a

MaxInvUIPoolSize

10

10

100

100

MaxIdleTimeExcessConnections

300

120

120

120

ZENAdminMgmt.MaxIdleTimeExcessConnections.

300

120

n/a

n/a

ZENClientMgmt.MaxIdleTimeExcessConnections.

300

120

n/a

n/a

ZENLoader.MaxIdleTimeExcessConnections

120

300

n/a

n/a

Batch.MaxIdleTimeExcessConnections

120

n/a

n/a

n/a

NOTE:* 900 is the ideal pool size for Micro Focus’s Performance and Scale testing. This is roughly 2/3 of the total number of permitted zenserver threads. If you have additional RAM and the database can support additional connections, you can increase the heaps, threadpools, and database connections accordingly, to further increase scalability.

These parameters can be set in the zdm.xml file in the <conf folder>\datamodel folder where the format of the entry is <entry key="paramater name">parameter value</entry>.

After you have determined the appropriate configuration for each server, you will need to calculate the total potential number of connections that all Primary Servers might require to the database. This will allow you to properly configure the number of connections the database will allow. To do this, simply add up the total number of Max Connections for each Primary Server in your environment. Then, if you are using ZENworks Reporting, add an additional 100 connections. An example is listed below.

Server Name

Roles

Max Number of Threads

Server1

Config/Auth

985 (900 ZENAdminMgmt.MaxPool + 15 ZENClientMgmt.MaxPool + 15 ZENLoader.MaxPool + 45 Batch.MaxPool + 10 InvUIMaxUIPool)

Server2

Config/Auth

985 (900 ZENAdminMgmt.MaxPool + 15 ZENClientMgmt.MaxPool + 15 ZENLoader.MaxPool + 45 Batch.MaxPool + 10 InvUIMaxUIPool)

Server3

Collection

95 (10 ZENAdminMgmt.MaxPool + 15 ZENClientMgmt.MaxPool + 15 ZENLoader.MaxPool + 45 Batch.MaxPool + 10 InvUIMaxUIPool)

Server4

Collection

95 (10 ZENAdminMgmt.MaxPool + 15 ZENClientMgmt.MaxPool + 15 ZENLoader.MaxPool + 45 Batch.MaxPool + 10 InvUIMaxUIPool)

Server5

ZCC

1020 (900 ZENAdminMgmt.MaxPool + 15 ZENClientMgmt.MaxPool + 15 ZENLoader.MaxPool + 10 Batch.MaxPool+100InvUIMaxUIPool)

Server6

Config/Auth/Collection

985 (900 ZENAdminMgmt.MaxPool + 15 ZENClientMgmt.MaxPool + 15 ZENLoader.MaxPool + 45 Batch.MaxPool + 10 InvUIMaxUIPool)

Adding these values, you get 985+985+95+95+1020+985 = 4165 connections. If you are using ZENworks Reporting, you will get a maximum of 4165+100 = 4265 connections to the database. You should ensure that your database is configured to permit at least so many connections.

ZENworks Audit Database Connection Pool Parameters (zenaudit.xml)

Additionally, a separate set of connection pools is available when connecting to the ZENworks Audit database. Unlike the ZENworks database connection pools, there is only a ZENAdminMgmt, ZENClientMgmt and a ZENLoader connection pool for Audit. The parameter names are the same as the ZENworks database equivalents. The table below shows the recommended values based on server role:

XML Parameter

Config Server

Collection Server

ZCC Server

Other/Default

ZENAdminMgmt.MinPoolSize

5

n/a

n/a

n/a

ZENClientMgmt.MinPoolSize

5

n/a

n/a

n/a

ZENLoader.MinPoolSize

5

n/a

n/a

n/a

MaxPoolSize

10

10

50

100

ZENLoader.MaxPoolSize

10

20

10

n/a

ZENAdminMgmt.MaxIdleTimeExcessConnections.

n/a

120

n/a

n/a

ZENClientMgmt.MaxIdleTimeExcessConnections.

n/a

120

n/a

n/a

ZENLoader.MaxIdleTimeExcessConnections

n/a

300

n/a

n/a

These parameters can be set in the zenaudit.xml file in the <conf folder>\datamodel folder, where the format of the entry is <entry key="paramater name">parameter value</entry>.

To calculate the required number of audit database connections, follow the same model as that shown at the end of ZENworks Database Connection Pool Parameters (zdm.xml).

4.1.5 Tuning the Threads Allocated to Loader Storer Processes

You can tune each of the processes responsible to store data (status, audit, patch, inventory) by increasing or decreasing the number of threads allocated to the process. If you have more threads, it means that the server will attempt to store more items in parallel. In most cases, the default values should be acceptable. However, if you find that you are seeing a backlog of files in the collection folder on the server, consider increasing these values.

To tune the threads for these processes:

  1. To adjust the thread pool, open the file for the relevant loader module. The following files can be adjusted:

    • inventorystorer.xml: Controls the number of simultaneous inventory scans that can be stored in the database.

    • auditeventsstorer.xml: Controls the number of simultaneous audit events that can be stored in the database.

    • statusstorer.xml: Controls the number of simultaneous status events that can be stored in the database.

    • AddPatchlinkAnalyzeReporting.xml: Controls the number of patch DAU results that can be stored simultaneously.

    • messageprocessor.xml: Controls the number of messages that can be stored simultaneously.

    These files can be found in the following locations:

    Windows: %zenserver_home%\conf\loader\inventorystorer.xml

    Linux: /etc/opt/microfocus/zenworks/loader/inventorystorer.xml

  2. Below the file you should find an entry that sets the ThreadPoolSize. The thread pool for the following files look similar to the following entry:

    • inventorystorer.xml: <Parameter Name="InventoryStorerThreadPoolSize">10</Parameter>

    • statusstorer.xml: <Parameter Name="thread-count">10</Parameter>

    • auditeventsstorer.xml: <Parameter Name="thread-pool-size">10</Parameter>

    • AddPatchlinkAnalyzeReporting.xml: <Parameter Name="PatchAnalyzeThreadPoolSize">10</Parameter>

    • messageprocessor.xml: <Parameter Name="MessageFilterProcessorThreadPoolSize">5</Parameter>

    Set this value to the desired number of threads.

  3. Save the file and restart the ZENworks Loader service.

NOTE:If you increase the number of threads that you allocate for storing, it might also be necessary to increase the MaxPoolSize parameter for the Connection Pool used by the storer that you are increasing. To do this, see ZENworks Database Connection Pool Parameters (zdm.xml) and ZENworks Audit Database Connection Pool Parameters (zenaudit.xml).

4.1.6 Tuning the Tomcat NIO Connector Used for Quick Tasks

Quick Tasks are administrator-initiated tasks that are sent to devices to perform operations on the devices. They allow an administrator to use ZENworks Control Center to perform remote operations on a device such as refreshing the device’s bundle, policy, and configuration information; initiating an inventory scan; rebooting the device; installing, launching, or repairing a bundle; initiating a patch scan; and much more.

Understanding Quick Task Communication

Quick Tasks use the ZENworks push notification service. The push notification service enables a ZENworks server to inform a managed device about work, such as a Quick Task, assigned to the device. Once a device is notified of a pending work, the device contacts a ZENworks Primary Server to retrieve the Quick Task.

In order to support push notifications, the ZENworks Update Service (ZeUS) on a device establishes a long-lived connection to the ZENworks server approximately one minute after device startup. The connection stays open until the server responds that there is work to do or until the connection times out (by default, after 60 minutes). If the server responds with a work notification, the connection is closed, ZeUS fetches the assigned Quick Tasks, processes them, and then establishes a new connection to the server. If the connection times out, ZeUS immediately establishes a new connection.

NOTE:ZeUS also performs agent updates. However, the update notifications are negligible in terms of workload and impact in comparison to the Quick Tasks. Therefore, the Tomcat NIO connector tuning focuses on what is required for Quick Tasks.

Tuning the NIO Connector

A device’s long-lived connection is established using the Apache Tomcat NIO (non-blocking IO) connector listening on the ZENworks server port 443. ZENworks uses the NIO connector to provide asynchronous connections with devices while not requiring a Tomcat thread for each connection. A thread is initially allocated to establish a connection but is quickly freed up and only the connection maintained.

Typically, the default settings should be sufficient and not require modification. If tuning is required, the following settings can be adjusted:

  • maxThreads: Because the NIO connector releases threads as soon as a connection is established, the default setting for maximum number of Tomcat threads should suffice. This default varies depending on the server’s RAM (see Maximum HTTPS Tomcat Threads).

    You can use the ZENworks Control Center Diagnostics dashboard to monitor the NIO connector threads in use and, if necessary, adjust appropriately.

  • maxConnections: The default maximum number of connections for the NIO connector is 8192. In general, the point at which load/traffic is impacted is when the connections come close to or hit the maximum. To reduce this impact, the ZENworks server tomcat valve limits connections to 95% of maxConnections, which means that when the 95% limit is reached the server returns a Server Busy response to the connecting device. The device can then connect to the next ZENworks Primary Server that is included in its closest server rules.

    One ZENworks Primary Server officially supports 10,000 devices. For this reason, you should not need to increase the maxConnections beyond 10,000 because the setting is aligned with the maximum number of supported devices. If the server is supporting more than 10,000 devices with acceptable performance, you can experimentally increase the connections up to 15,000. However, keep in mind that anything beyond 10,000 has not been stress-tested and could cause issues. The best option is to ensure that you have enough ZENworks Primary Servers to support the number of managed devices in your zone (maximum of 10,000 devices per server), that you have configured no more than the optimal number (10,000) of maxConnections, and that you have set up your closest Configuration Server rules to allow a device to fail over to other servers until it finds an available connection.

    To monitor the number of connections that are remaining in an ESTABLISHED state, you can use tools such as netstat or iproute2.

The following steps explain how to edit the server.xml file on a Primary Server to change the settings. If the Primary Server is a ZENworks Appliance, you can optionally log into the ZENworks Appliance Console and use the ZENworks Configuration options to change the settings.

Note that the NIO connector default is 8192 maximum connections so the maxConnections setting is not generally listed. You only need to add it if specifying a number other than 8192.

  1. Open the server.xml file for the operating system on which the Primary Server is running.

    Windows

    • ZENAdminMgmt: %ZENSERVER_HOME%\services\zenadmin-mgmt\conf

    • ZENClientMgmt: %ZENSERVER_HOME%\services\zenclient-mgmt\conf

    Linux

    • ZENAdminMgmt: /etc/opt/microfocus/zenworks/tomcat-conf/zenadmin-mgmt/

    • ZENClientMgmt: /etc/opt/microfocus/zenworks/tomcat-conf/zenclient-mgmt/

  2. Look for the NIO connector for port 443 section and modify it as necessary:

    <Connector SSLEnabled="true" acceptCount="100" allowHostHeaderMismatch="true" ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256" clientAuth="false" disableUploadTimeout="true" enableLookups="false" keyAlias="tomcat" keystoreFile="C:\Program Files (x86)\Micro Focus\ZENworks\conf\security\server.keystore" keystorePass="74721885bbe85e4ed31504aa80caaa5b" maxHttpHeaderSize="8192" maxPostSize="-1" maxSpareThreads="75" maxThreads="1000" minSpareThreads="25" maxConnections="12000" port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2,SSLv2Hello" sslProtocol="TLS" />
  3. Save the file.

  4. if you have performed the above configuration, then set com.novell.zenworks.zeus.worktodo.maxconnections=<the number of maxConnections configured in the server.xml can be added here> in the following files:

    • On Windows: %ZENSERVER_HOME%\conf\worktodoservlet.properties

    • Linux: /etc/opt/microfocus/zenworks/worktodoservlet.properties

    The number of com.novell.zenworks.zeus.worktodo.maxconnections being configured should always be lesser than or equal to the maxConnections configured in server.xml.

    NOTE:if the worktodoservlet.properties file does not exist, then create the file and add the com.novell.zenworks.zeus.worktodo.maxconnections property.

    Connections are required for every request made to the server. In the case of other web requests made during agent refresh, also a connection is consumed, although for a short period of time until the request is serviced. In the case of Push Notification connections, the connections are long-lived. So, the max number of connections that should be configured should be a total of devices that we expect to connect for push notification and the number of tomcat threads configured, which might all get consumed during a burst load.

    Therefore, to set apart a quota of connections for other web requests during agent refresh, it is important to limit the number of push notification connections. This can be done by configuring the maximum number of push notification connections allowed via the worktoservlet.properties file.

  5. Start the ZENworks services again.

For more information about the other connector settings, see the Apache Tomcat Configuration Reference.