This article addresses the following scenarios:
IT Management Suite (ITMS) / Client Management Suite (CMS)
ITMS 8.5 RU3 through 8.8 (with applicable Point Fixes)
AeXSvc.exe — Notification Server (NS) main process
AltirisClientMsgDispatcher (controls NSE queue processing)
Altiris File Receiver Service (w3wp.exe / IIS)
The SMP Server processes Notification Server Event (NSE) files to receive inventory, policy compliance, and status data from managed endpoints. NSE processing issues fall into two broad categories:
Both types produce similar symptoms (NSEs sitting in EvtQueue), but require different responses. This article guides you through diagnosing which category applies before prescribing a resolution.
ℹ️ Related Articles For a high-level entry-point overview of NSE backlog scenarios: NSE Backlog: Troubleshooting Delayed Reporting and Event Processing (KB 421492) |
Use the following table to identify the most likely root cause before proceeding to troubleshooting steps:
Probable Cause | Likelihood | Key Evidence | Notes |
|---|---|---|---|
SQL transport-level network failure | High | A transport-level error has occurred in NS log; DatabaseContext finalizer called | Restart AltirisClientMsgDispatcher to clear stalled chains; engage network/DBA team |
Overly aggressive inventory policy | High | High NSE count from specific machines (SSETools or SQL query); [NseMeta] log shows large policy counts | Stagger schedules; reduce frequency or scope |
Thread pool over-configuration | Medium | @100 threads per queue in PerformanceSensor; high SQL deadlock count | Reduce total threads to ≤ 50% of CPU count |
SQL index fragmentation | Medium | Slow query execution; MIN(id) in EventQueueEntry not advancing | Rebuild/reorganize indexes on EventQueue* tables |
Malformed / broken NSEs | Medium | Failed to load inventory + invalid character errors in NS log | Identify source script/policy; use EventFailureBackupFolder to capture for inspection |
PauseActivities registry key set | Low | Services running but zero processing; registry key = 1 | Set registry key to 0 |
Disk I/O bottleneck | Low | High disk queue in Perfmon; slow file writes to EvtQueue folder | Check RAID health, VM storage reservations, VMTools version |
Missing data class for custom inventory | Low | NSE dispatch failed with specific GUID; GUID not found in database | Disable or update the orphaned custom inventory script |
Overview
The Symantec Management Platform (SMP) uses Notification Server Events (NSEs) — compressed XML files — to communicate data from endpoints to the server. Slow or stalled NSE processing is a common cause of outdated inventory, delayed policy execution, and overall server performance degradation.
ITMS 8.5 RU3 and 8.5 RU4 introduced multiple stability and performance improvements for NSE processing. ITMS 8.6 further optimised the SQL query strategy for finding processing candidates (from per-query single-pick to application-level ordering). ITMS 8.8 added Event Data Analytics reports and the [NseMeta] log instrumentation for deeper visibility into incoming event patterns.
If you are on an older version and NSE processing issues are recurring, upgrading to the most recent supported release is strongly recommended.
⚠️ Common Background Cause The most frequent cause of NSE processing issues is client machines sending too many NSEs simultaneously. This may be due to:
|
The most effective first step in ITMS 8.8 is to use the built-in Event Queue reports:
For more information on these reports, see: Using Event Data Analytics for understanding SMP Server performance (KB 398266)
The NS logs are the primary diagnostic tool for NSE processing issues. Open the Altiris Log Viewer on the SMP Server (Start > Symantec > Altiris Log Viewer) and filter by source: PerformanceSensor.
Three log prefixes are relevant. Understanding what each one covers prevents misdiagnosis:
This is the most important entry for NSE troubleshooting. It reports the real-time state of the NSE processing engine.
Format — Overall Dispatcher Line:
[EventQueueDispatcher] [running, enabled]
[612.03 k / 2.89 GB] => [32 / 96 / 6.41 m @ 46(0) t, 53.1 i/s, 2.18:03:03]
Field | Meaning | What to Look For |
|---|---|---|
[running, enabled] | Component status | Must show running, enabled. If disabled, check PauseActivities registry keys. |
612.03 k | Pending NSE count waiting for processing | ⚠️ Above 50,000–80,000 in a single queue is a backlog warning. Above 100k is critical. |
2.89 GB | Total pending NSE size | Size is secondary to count — count causes more SQL pressure than size. |
32 | NSEs currently being dispatched (in active processing) | Should be non-zero if queue is non-empty. |
96 | NSEs loaded into memory and queued for dispatch | |
6.41 m | Total NSEs processed since service start | Cumulative counter — useful for rate comparison across samples. |
46(0) t | Active threads (threads currently idle) | 46 active, 0 idle. If active = 0 while queue is full, the dispatcher is stalled. |
53.1 i/s | Current processing speed (NSEs per second) | 0.0 i/s with a non-empty queue = stall condition. |
2.18:03:03 | Service uptime (D:HH:MM:SS) | Resets when AltirisClientMsgDispatcher is restarted. |
Format — Per-Queue Line:
[1: 574.68 k / 1.44 GB, full] => [1: 16 / 48 @ 16(0,34) c / 5.79 m @ 16(0) t, 22.2 i/s, 13:12:09] [fast .. 244.14 KB]
Field | Meaning | What to Look For |
|---|---|---|
1: | Queue ID (0=priority, 1=fast, 2=default, 3=slow, 4=large) | See queue ID table below. |
574.68 k / 1.44 GB | Pending count / pending size for this queue | High count = heavy SQL ordering pressure for sequential processing. |
full | Queue has reached its size limit | Priority and fast queues each have a ~1.45 GB size cap. 'full' means new NSEs for this queue are rejected. |
16 / 48 | Currently processing / loaded in memory | |
16(0,34) c | Chains (locked chains, podcast count) | Locked chains > 0 may indicate processing contention. |
5.79 m | Total processed by this queue | Cumulative. |
16(0) t | Active slots (active threads) | 0 active threads on a non-empty queue = stall. |
22.2 i/s | Queue processing speed | |
13:12:09 | Time since last activity on this queue | Long duration with no activity on a non-empty queue = stall indicator. |
fast .. 244.14 KB | Queue name and the max NSE file size routed to this queue | NSEs larger than this threshold go to the next queue. |
Queue ID | Queue Name | NSE Size Threshold | Core Setting (Max Threads) | Default Threads |
|---|---|---|---|---|
0 | Priority | Up to 19.07 MB (small, high-priority) | MaxConcurrentPriorityMsgsThreadPoolSize | 16 |
1 | Fast | Up to 244.14 KB | MaxConcurrentFastMsgsThreadPoolSize | 16 |
2 | Default / Normal | Up to 4.77 MB | MaxConcurrentDefaultMsgsThreadPoolSize | 8 |
3 | Slow | Up to 19.07 MB (large) | MaxConcurrentSlowMsgsThreadPoolSize | 4 |
4 | Large | Above 19.07 MB | MaxConcurrentLargeMsgsThreadPoolSize | 2 |
This entry reports statistics for the engine that receives NSEs from agents and delivers them into the EventQueueDispatcher. The label [file system] indicates that NSEs are being delivered via the EvtInbox folder mechanism — this is the standard delivery mode.
[PostEvent] [file system]
succeeded: # 11.48 k (3.76 GB), 0.1 i/s (24.05 KBps), 0.0 / 0.0 / 0.4 / 0.0
failed: # 1.48 k (308.13 MB), 18.3 i/s (3.85 MBps), 0.0 / 0.1 / 33.8 / 39.3
Field | Meaning | What to Look For |
|---|---|---|
succeeded: # 11.48 k (3.76 GB) | Total NSEs successfully delivered and total size | Normal — agents are sending and delivery is working. |
0.1 i/s (24.05 KBps) | Current delivery rate | Watch for sudden spikes (e.g., 3+ MB/s) which are early warnings of impending queue saturation. |
0.0 / 0.0 / 0.4 / 0.0 | Rate breakdown across 4 time windows (short to long) | Helps detect whether a rate change is recent or sustained. |
failed: # 1.48 k (308.13 MB) | NSEs that could not be delivered — agents will retry | A rising failed count means the EventQueueDispatcher is full or experiencing failures. SMA agents will retry later but may appear stale. |
18.3 i/s (3.85 MBps) | Current failure rate | Any non-zero failure rate warrants checking EventQueueDispatcher queue status. |
⚠️ Incoming Spike as an Early Warning Monitor the succeeded bytes-per-second value across consecutive PerformanceSensor samples. A sudden significant increase in the incoming rate — especially coinciding with a scheduled inventory or task policy run — is an early warning that the EventQueueDispatcher may be approaching full capacity. When a spike is observed, immediately check the [EventQueueDispatcher] pending count. |
This entry is not related to NSE processing from client endpoints. NSMessageQueue is an internal NS infrastructure component that passes messages between NS processes and plugins using the NS API. Its statistics appear alongside NSE-related entries in PerformanceSensor logs, which can cause confusion.
[NSMessageQueue] [running, enabled, uptime: 2:18:03:22]
[queue: 0 (@0), added: 14.77 m @ 0.0 i/s (0.00 | 0.00 | 0.00 | 0.00), peak: 97 (6.41 k)]
[processing: 14.77 m @ 0.0 i/s (0.00 | 0.00 | 0.00 | 0.00)]
[data: 6.71 GB @ 0 Bps (0 Bps | 0 Bps | 0 Bps | 0 Bps)]
[raiser: 0, added: 127.11 k @ 4.4 i/s (3.54 | 2.93 | 5.78 | 5.40), peak: 31]
[settings: 100 k, wait: 200, over limit: False]
Field | Meaning | What to Look For |
|---|---|---|
[running, enabled, uptime: ...] | Component status and uptime | Confirm running, enabled. Uptime resets on service restart. |
queue: 0 (@0) | Current queue depth and active slots | Should be near 0. Brief spikes are expected and normal. |
added: 14.77 m @ 0.0 i/s | Total messages added; current rate | High cumulative total is normal. Focus on current rate, not lifetime count. |
peak: 97 (6.41 k) | Peak queue depth observed (97) and session high (6,410) | Brief peaks under a few hundred are expected. Sustained highs warrant attention. |
settings: 100 k, wait: 200 | Max queue depth allowed (100,000); wait interval in ms | Compare queue depth to this limit for headroom. |
over limit: False | Whether queue has exceeded capacity | over limit: True is the ONLY value here requiring immediate action. False = healthy. |
✅ Key Point High total counts (millions) and historical peaks in NSMessageQueue are completely normal and should not be treated as evidence of a problem. When investigating NSE processing issues, you can validate this component is healthy simply by confirming it shows [running, enabled] and over limit: False, then move on to [EventQueueDispatcher]. |
NSE processing issues rarely appear in a single log snapshot. Comparing multiple samples over time reveals the progression. Collect PerformanceSensor samples at baseline, at issue onset, and during full degradation, then compare:
Stage | NSMessageQueue | EventQueueDispatcher | PostEvent | Interpretation |
|---|---|---|---|---|
Baseline (healthy) | rate: ~194 i/sover limit: False | pending: 0 / 0 Bthreads active, speed > 0 i/s | succeeded onlyfailed: 0 | Queues draining normally. No action needed. |
Issue onset | rate drops: ~97 i/sover limit: False | pending: 274k / 2 GBpriority queue fullthreads still active | succeeded still risingfailed: 0 yet | Queue filling fast. Dispatcher struggling. Incoming rate still high. Act now — investigate source policy. |
Full degradation | rate: 0.0 i/sall rates zero | pending: 612k / 2.89 GBpriority + fast both fullspeed: 0.0 i/s0 active threads | failed: 1.48k at 18 i/sagents now rejected | Dispatcher stalled. SMA agents cannot deliver NSEs. Restart AltirisClientMsgDispatcher. Investigate SQL errors. |
Key diagnostic rule: When [NSMessageQueue] processing rates drop to zero while [EventQueueDispatcher] is still filling, the bottleneck is in the NSE dispatcher — not in NS internal messaging. [PostEvent] failures appear after the dispatcher is already full — this is the expected sequence.
Before taking any remediation action, identify the NSE type and source so the correct corrective action is applied.
Starting with ITMS 8.8, the NS log includes entries prefixed with [NseMeta]. These are rebuilt approximately every hour and show the most active NSE types processed during that window.
[NseMeta] 00:28:47, # 184
'Collect Full Inventory - GroupA' (acf24e2f-...): 14.43 k (1.99 GB), failed: 1, queues: {fast,default}, time taken: 1:38:42.16
'Custom Inventory - AppList' (d614d3f1-...): 11.48 k (582.38 MB), failed: 1, queues: {fast,default}, time taken: 0:31:45.60
Field | Meaning |
|---|---|
00:28:47, # 184 | Time since last flush; number of distinct NSE types tracked in this window |
Policy name + GUID | The SMP policy or task generating these NSEs |
14.43 k (1.99 GB) | Count and total size of NSEs processed for this policy in the window |
failed: 1 | Number of NSEs for this policy that exhausted all retry attempts |
queues: {fast,default} | Internal queues that handled this policy's NSEs. Spanning both means some NSEs exceeded the fast-queue size threshold. |
time taken: 1:38:42.16 | Cumulative CPU time across all threads — NOT wall-clock time |
Use [NseMeta] to: Identify which policy generates the highest NSE volume or failure rate; detect unexpectedly large or failing custom inventory scripts; and validate that NSE counts reduce after policy adjustments.
SSETools provides a visual breakdown of NSE types (Scenario Counts) and source machines (Resource Counts) for file-based NSEs in the EvtQueue folder.
Download: SSETools (KB 150132)
⚠️ SSETools Limitation SSETools only analyzes file-based NSEs stored in the EvtQueue folder. Smaller NSEs are stored as inline entries directly in the database (EventQueueEntry table) and are not visible to SSETools. Always supplement SSETools analysis with the SQL queries below for a complete picture. |
Use the following queries against the Symantec_CMDB database:
Average NSE count per computer:
DECLARE @compcount AS INT = (SELECT COUNT(*) FROM vComputer)
SELECT ItemName, COUNT(ResourceGuid) / @compcount
FROM Evt_NS_Event_History h
WHERE _eventTime >= GETDATE() - 1
GROUP BY ItemName
ORDER BY 2 DESC
Find machines with the most NSEs (above 500):
SELECT c.Name, [Source], COUNT(*)
FROM EventQueueEntry e
JOIN vRM_Computer_Item c ON c.Guid = e.[Source]
GROUP BY c.Name, [Source]
HAVING COUNT(*) > 500
ORDER BY 3 DESC
Machines and NSE counts for a specific time period:
SELECT DISTINCT c.Guid, c.Name, COUNT(*) EventCount
FROM Evt_NS_Event_History h
JOIN vRM_Computer_Item c ON c.Guid = h.ResourceGuid
WHERE h._eventTime BETWEEN '2024-12-22 06:00:00.00' AND '2024-12-23 11:00:00.00'
GROUP BY c.Guid, c.Name
ORDER BY 3 DESC
Drill into NSE types for a specific machine (use GUID from query above):
SELECT _eventTime, ItemGuid, ItemName, ResourceName
FROM Evt_NS_Event_History
WHERE ResourceGuid = '<computer GUID here>'
AND _eventTime BETWEEN '2024-12-22 06:00:00.00' AND '2024-12-23 11:00:00.00'
ORDER BY _eventTime
Once you have identified the source, use this table to select the appropriate response:
If the Source Is... | Action to Take |
|---|---|
Scheduled Basic Inventory | Stagger the schedule to prevent all agents reporting simultaneously. Navigate to: Settings > Agents/Plug-ins > Targeted Agent Settings > Symantec Management Agent Settings. Modify the Basic Inventory schedule to use randomized start times. |
A specific Solution Policy (e.g., Software Inventory) | Navigate to the policy (e.g., Manage > Policies > Software). Review its schedule and Applied To targets. Reduce frequency or narrow the target population. |
Agents flushing queued NSEs after network reconnect | Use FlushAgentEvents core setting to instruct client machines to clear their local agent queues. In the SMP Console, go to Settings > Notification Server > Core Settings > Filter and search for "FlushAgentEvents". See: KB Clearing queued events on endpoints in SMP 8.x (KB 175204) |
Custom inventory script referencing deleted data class | Identify the GUID in the 'NSE dispatch failed' log error. Query the database to confirm the data class is gone. Disable or update the custom inventory script. |
No clear source identified | Temporarily disable all non-essential inventory policies for 2 hours. If the backlog begins clearing, re-enable policies one by one to isolate the cause. |
NSE types — inline vs. file-based:
What happens when an NSE fails to process:
ℹ️ EventFailureBackupFolder Core Setting To preserve failed NSEs for analysis: Navigate to: Settings > Notification Server > Core Settings Search for: EventFailureBackupFolder Set the value to a valid local folder path (e.g., C:\NSE_Failures). Failed NSEs will be moved here instead of deleted, allowing inspection of malformed XML or invalid data class references. |
If NSEs are arriving but nothing is processing, verify that the SMP services are running and activities are not paused:
HKEY_LOCAL_MACHINE\SOFTWARE\Altiris\eXpress\Notification Server\PauseActivities
HKEY_LOCAL_MACHINE\SOFTWARE\Altiris\eXpress\Notification Server\PausedNSMessaging
Review the [SYSTEM] PerformanceSensor entry for CPU, memory, and SQL health:
[SYSTEM]
[app cpu: 0%, ram: 301.34 MB / 1%, uptime: 57.11:50:59]
[ns cpu: 3%, ram: 4.70 GB / 24%, uptime: 55.18:31:50]
[sql cpu: 4%, ram: 9.15 GB / 58.5% (Available physical memory is high), cpu history %: 23/3/3/3/3/17/4/3/3]
[ns machine: SMP-MAIN (V), ram: 19.53 GB, cpu: 1x1995Mhz, versions: 8.5.5032.0]
[sql machine: sql-main (V), ram: 15.62 GB, cpu: 1x1, affinity: 2 (AUTO), version: 13.0.5026.0 / Enterprise Edition (64-bit)]
A critical but often overlooked root cause is intermittent network-level disconnections between the SMP server and SQL Server. These are not standard SQL timeout errors — they are transport-level drops that occur while the SMP holds SQL connections open for batched processing operations.
Even a very brief drop (seconds) can cause a disproportionate impact: the SMP fails to complete partially-written database operations, leaving NSE processing chains marked as 'in progress' in the database — when in fact no thread is working on them. These chains are not automatically recovered while the service is running.
SQL transport-level error signatures — search for these in NS logs:
Severity | Log Pattern | Meaning |
|---|---|---|
Critical | A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The specified network name is no longer available.) | Network path to SQL Server dropped momentarily. |
Critical | An existing connection was forcibly closed by the remote host. | SQL Server or a network device actively closed the TCP connection. |
Critical | The semaphore timeout period has expired. | SQL connection attempt timed out at the network layer. |
Warning | DatabaseContext finalizer called, which should not happen. This: [D: 1/65/0] {ConnOwner, Invalid, ReadCommitted, Closed} | A SQL context object was garbage-collected in an invalid/dead state — indicates an earlier transport failure in the same process. |
Error | The current database context is invalid due to a previous critical error. [InvalidDatabaseContextException @ Altiris.Database.dll] | Downstream effect of a transport failure — operations failing because the SQL context is already dead. |
Error | NSE dispatch failed for: ... Failed to load inventory. [AeXException @ Altiris.NS.dll] ... A transport-level error has occurred... | NSE dispatch aborted mid-processing due to SQL transport failure. This NSE may now be stuck. |
The DatabaseContext finalizer called message contains a clue to find the original failure:
DatabaseContext finalizer called, which should not happen.
This: [D: 1/65/0] {ConnOwner, Invalid, ReadCommitted, Closed} id=3268, t='None', s=1/65 id=3267, AdminDatabaseContext
The second number in the s=N/XX field (here 65) is the original Thread ID of the code that caused the SQL context to be invalidated.
⚠️ Standard SQL Ping Tools May Not Detect This SQL ping tools (including the SQL Test tool in SSETools) may show normal response times while the SMP logs fill with transport errors. The drops are extremely brief — often fractions of a second. Wireshark packet captures between the SMP and SQL servers during an active failure window provide the most reliable evidence. Also review Windows Event Logs and SQL Server logs at the same timestamps when the errors occur in the NS logs. |
For deeper diagnostics, enable extended verbosity in the Altiris Log Viewer:
Extended verbosity reveals much more detailed PerformanceSensor output and per-chain dispatching information, which is valuable when the standard log is insufficient to diagnose the root cause.
Use the following query to check for a discrepancy between the file count in EvtQueue and the database. If the database shows processing activity but the EvtQueue folder count is not decreasing, something may be out of sync:
Count of NSEs referenced in the database:
SELECT COUNT(*) FROM EventQueueEntryMetadata
Check if the oldest NSE in the queue is advancing:
SELECT MIN(id) AS Oldest, MAX(id) AS Newest
FROM EventQueueEntry
Run this query twice, approximately 2–3 minutes apart. If the Oldest value does not change between runs, the oldest NSE chain is stalled and not being processed.
This scenario is distinct from a volume-based backlog. A small number of NSEs (fewer than 50) sit in EvtQueue indefinitely, all other queue folders are empty, and the server appears otherwise healthy. The root cause is a SQL transport failure that left internal processing chains marked as 'in progress' in the database, even though no thread is actually working on them.
The AltirisClientMsgDispatcher service contains a built-in consistency-check routine that detects and resolves these stranded chains. This check only runs at service startup — it cannot safely run while NSEs are actively being processed.
🚫 Do NOT Manually Move NSE Files Do NOT move NSE files manually from the EvtQueue folder to EvtInbox to force reprocessing of a small number of stuck events. NSEs must be processed in chronological order per resource. Moving them manually bypasses this ordering and can produce data inconsistencies in the Symantec_CMDB database. The manual move procedure described in KB Troubleshoot NSE Processing in 8.5 and later (KB 172741) is designed only for large-scale NSE backlogs (thousands of files) caused by major events such as SQL crashes or catastrophically misconfigured policies — not for a handful of organically stuck NSEs. |
Correct procedure for resolving stuck NSEs:
Navigate to: Settings > Notification Server > Internals > Core Performance → Click [Restart] on the Client Message Dispatcher row.
In environments with constant inventory collection or heavy NSE traffic, EventQueue table indexes can become fragmented, adding measurable overhead to NSE processing queries.
Ensure a SQL Maintenance Plan is in place for the Symantec_CMDB database. Related references:
Primary tables to monitor for index fragmentation:
If you have slow NSE processing, you could try to use SQL Server "Rebuild All" and "Reorganize All" functionality on the indexes used by these Event Queue tables.
ℹ️ Note on Index Fragmentation Impact Index fragmentation can help reduce processing bottlenecks, but the improvement is often modest and temporary in high-volume environments. NSEs are written and removed continuously, so indexes refragment quickly. Rebuilding indexes is valuable to improve performance at the margin — it does not address the underlying cause of a large backlog. |
Incorrectly configured thread pool settings are a common cause of NSE processing problems — too many threads cause SQL deadlocks and degrade throughput. More threads do not mean faster processing.
The combined total of all MaxConcurrent*MsgsThreadPoolSize values should not exceed 50% of the SMP server's available CPU core count for standard environments. For environments with heavy IIS load (many active agent connections), active Persistent Connections (websockets), or ongoing hierarchy replication, consider limiting total threads to one-third (33%) of available CPU cores.
⚠️ CPU Count Changes If the SMP server's CPU count has been reduced (e.g., due to VM rightsizing), review and reduce thread pool settings proportionally. These settings do not auto-adjust when CPU resources are changed. |
SMP CPU Cores | Standard Max Total Threads (50%) | Heavy IIS/Replication (33%) | Suggested Distribution (Priority / Fast / Default / Slow / Large) |
|---|---|---|---|
8 | 4 | 3 | 1 / 1 / 1 / 1 / 0 |
16 | 8 | 5 | 2 / 2 / 2 / 1 / 1 |
32 | 16 | 10 | 4 / 4 / 4 / 2 / 2 |
64 | 32 | 20 | 8 / 8 / 8 / 4 / 4 |
To configure thread pool settings:
The following is an example of a severely over-threaded configuration observed in a production environment (ITMS 8.7.2, 32-CPU SMP server):
[EventQueueDispatcher] [running, enabled]
[76.91 k / 3.25 GB] => [300 / 462 / 57.08 k @ 500(300) t, 1.2 i/s, 07:00:24]
[Queues]
[0: 21.25 k / 1021.10 MB] => [0: 100 / 156 @ 1(0,0) c / 1.91 k @ 100(100) t, 0.0 i/s, 00:00:25] [priority .. 20 MB]
[1: 52.02 k / 862.45 MB] => [1: 100 / 150 @ 100(98,148) c / 52.42 k @ 100(100) t, 1.0 i/s] [fast .. 244.14 KB]
[2: 3.64 k / 1.41 GB] => [2: 100 / 156 @ 71(50,0) c / 2.51 k @ 100(100) t, 0.2 i/s, 00:00:11] [default .. 4.77 MB]
This configuration uses 100 threads per queue (500 total) on a 32-CPU server. The recommended maximum for this server is 16 total threads. The result is extreme SQL deadlock contention and a processing speed of only 1.2 i/s — despite 300 threads being active.
Correct settings for this server (32 CPUs): Priority: 4 / Fast: 4 / Default: 4 / Slow: 2 / Large: 2 = 16 total.
The core setting EvtQueueMaxCount limits the total number of NSEs allowed in the EventQueueDispatcher at one time. When this limit is reached, the queue is marked 'full' and new NSEs are rejected until space is available (the SMA agent will retry sending them).
⚠️ EvtQueueMaxCount Value Format The value must be entered as a plain integer. Do not use 'k' notation. For example, to set a limit of 50,000, enter 50000, not '50k'. |
Recommended starting values:
Note: MaxFileQSize (previously used to limit queue size) has been deprecated and is no longer effective. Use EvtQueueMaxCount instead.
This setting was introduced in SMA_SMP_8_8_PF_v10 (see CUMULATIVE POST ITMS 8.8 RTM(GA) POINT FIXES (KB 400510)). It controls how the SMP manages SQL database connections when intermittent SQL connectivity drops are detected.
Value | Description | When to Use |
|---|---|---|
0 | Conservative — SQL connections opened/closed per operation | Use if instability continues after trying value 2. |
1 | Optimized (default) — connections held open for batched operations | Normal operation with stable SQL connectivity. |
2 | Balanced — first mitigation step when SQL transport errors are observed | Start here when transport-level SQL errors appear in logs. |
To configure:
If Persistent Connections / Time Critical Management / Endpoint Management Workspaces have been configured, be aware that persistent connections hold open CPU threads on the SMP for the duration of each active connection. This reduces the CPU available for NSE processing.
If Persistent Connections are not required, it is advisable to disable them. If they are required, apply the conservative thread pool sizing (one-third of CPU count) described in Step 9.
Disk I/O issues affect both the physical EvtQueue file writes and the SQL database operations that underpin NSE processing.
Related KB articles:
If the EventQueueDispatcher has accumulated thousands of NSEs that are not draining — typically caused by a SQL crash, service outage, or catastrophic policy misconfiguration — follow the procedure in:
Troubleshoot NSE Processing in 8.x (KB 172741)
That procedure involves stopping services, moving NSE files from EvtQueue to a temporary folder, truncating SQL event tables, restarting services, monitoring recovery, enabling FlushAgents if necessary, and then copying NSEs back in small batches to EvtInbox.
🚫 This Procedure Is for Large-Scale Backlogs Only Do NOT apply the Troubleshoot NSE Processing in 8.x (KB 172741) truncation procedure to a small number of stuck NSEs (use case 4). For small counts, restart the AltirisClientMsgDispatcher service as described in Step 7. The truncation procedure is a last resort for catastrophic backlog situations. |
If the issue cannot be resolved with the steps above, collect the following before escalating:
After applying any resolution steps, confirm the issue is resolved using the following checks:
Verification Check | How to Verify | Expected Healthy Result |
|---|---|---|
PerformanceSensor — Active Threads | Locate the latest [EventQueueDispatcher] entry in the NS log | Active thread count > 0 for queues with pending NSEs. No queue marked 'full'. Speed > 0 i/s. |
EventQueueEntry — Oldest ID advancing | Run MIN/MAX query twice, 3 minutes apart | Oldest value changes between runs, confirming dispatcher is progressing. |
EvtQueue folder — File count decreasing | Check file count in C:\ProgramData\Symantec\SMP\EventQueue\EvtQueue | File count trending downward over time. |
NS log — No new SQL transport errors | Search NS log for 'transport-level error' after applying mitigations | No new instances appearing in logs after the fix. |
Core Performance page — Thread counts | Navigate to: Settings > Notification Server > Internals > Core Performance | Active Threads shows non-zero values for queues with pending items. Queue count trending down. |
Console Reports — Pending Events | Reports > Notification Server Management > Server > Event Queue > Pending Events | Pending NSE count is below 50,000 and decreasing. |