Environment
Novell ZENworks 10 Configuration Management with Support Pack 3 - 10.3
Situation
The ZCM agent takes much longer on some devices to refresh and uses significantly more memory than on some other devices.
Resolution
Bundles with a significant number of actions, normally in the 100s or 1000s, should be converted to MSI format which will greatly reduce the processing overhead.
Additional Information
During a refresh, the ZCM agent parses all of the .APPSTATE files located in the %ZENWORKS_HOME%\cache\zmd folder.
Each .APPSTATE has a file name that matches the GUID of the associated bundle.
Deleting a bundle will not cause the associated .APPSTATE file to be cleaned up immediately, it may remain on the system for 30 days or longer.
To determine if .APPSTATE files are causing an issue, on a test workstation delete all the existing .APPSTATE files, disassociate all bundles from the User and the Device, reboot, logon and perform a refresh. If times appear faster, slowly start re-associating bundles. Those bundles with the largest .APPSTATE files are most likely to cause an issue, though the correlation is not 100%. Some very large .APPSTATE files may cause less of an issue than other similarly sized .APPSTATE files.
The bundles most likely to cause issues are those migrated from ZDM that were created using Snapshot and migrated as Invididual actions instead of as an MSI.
Also bundles that have an "Install Directory Action", where 1,000s of files are stored in the directory being copied from the content-repo are the most likely ones to cause an issue.
Only a small percentage of bundles migrated from ZDM as individual actions or ZCM bundles that use "Install Directory" actions are likely to cause an issue, but these are the types of bundles may be the type of bundles that may cause slowness.
Below is an SQL Query that can be run against your database to generate a list of all bundles, the number of individual actions they contain, and sorted by the number of individual actions.
-----------------------------------------------------------------------------------------------
select b.zuid, b.displayname, count(act.id) from zAction act,
zBundle b,
zactionsetobject ao,
zactionset aset
where ao.zuid = b.zuid
and aset.actionsetobject = ao.zuid
and act.actionset = aset.id
group by b.zuid, b.displayname
order by count(act.id) desc;
zBundle b,
zactionsetobject ao,
zactionset aset
where ao.zuid = b.zuid
and aset.actionsetobject = ao.zuid
and act.actionset = aset.id
group by b.zuid, b.displayname
order by count(act.id) desc;