Skip to main content

Every now and then we see a prockees.exe process active which seems to be part of indicium.

Can anyone tell me what this thing does? It also seems to start on a certain trigger, but we are unable to determine what trigger that is, because it’s not always active.

It also looks like there is only one prockees process active per server although we are running multiple indicium services per server. Does this impact the service due to the prockees process not being bound to a specific service (i.e., performance or environment separation).

Thanks in advance

Ricky

Hey Ricky.

TLDR; Indicium uses that prockees process to run code for certain features that have dependencies that cannot be run/loaded in the main process. The main example being (most) types of reports. Since the prockees process is a child of the Indicium process it should always shutdown when Indicium itself is shutdown.

 

Indicium is currently built to run on .NET 6. The following features have dependencies on libraries that only work on .NET Framework 4.X:

  • Crystal Reports
  • SSRS
  • DevExpress reports (not entirely true anymore since release 2022.2.15.0 but it still is with the default settings on Windows)
  • Accessing DB2 databases with the old iSeries driver
  • The print pdf action in process flows

To make it possible to use these features Indicium spawns a child/worker process (prockees) which takes care of loading the needed libraries for the feature and then sets up some channels so Indicium can make IPC calls to it. The files for all this can be found in the “plugin” directory of the Indicium installation.

In addition to making it possible to use these features, for generating reports (which is a rather expensive operation most of the time) it also has the added benefit of not blocking the thread that is handling the request inside the main Indicium process. This means that, while the prockees process is busy generating the report, the Indicium thread is free to be used for other things like executing queries. This is why even though running DevExpress reports in .NET 6 mode would be possible in the main Indicium process we still spawn a separate (.NET 6) prockees process.

The reason you do not always see the prockees process is because Indicium will not start it unless a request tries to use one of the features mentioned earlier. This does cause a slight performance decrease for the first request that accesses it. For Crystal Reports/SSRS/DevExpress we have a preload setting so users can configure that some of that performance hit happens during startup of Indicium instead. I could not find it in our documentation page but it is described in the 2021.2.10 release notes.

Keep in mind that to avoid dependency conflicts each feature also spawns its own prockees instance. So if you were to use both DevExpress reports and the print pdf action Indicium will spawn 2 prockees worker instances instead of 1. The amount of worker processes can also be configured for the Crystal Reports, SSRS, DevExpress reports and DB2 features. Please check the links earlier in this post for some examples.

I hope this was a clear enough explanation on what this process is and is used for.

If you have any more questions please let me know.