Hi,
I've been monitoring Cognos Java process, either WLP, Query Service and Flint service using tools like VisualVM and https://www.gceasy.io/
Another tool to analyze GC verbose logs is IBM Garbabe and Memory Analyzer <https://www.ibm.com/docs/en/mon-diag-tools?topic=monitoring-diagnostic-tools-garbage-collection-memory-visualizer>
At Query Service and Flint you can add additional JVM options to exposure JMX metrics.
At bin64 folder, you can edit bootstrap_wlp_"os".xml and add these lines bellow tag <param>-verbose:gc</param>
<param condName="${java_vendor}" condValue="IBM">-Xverbosegclog:../logs/disp_gc.log,10,10000</param>
<param condName="${java_vendor}" condValue="IBM">-Dcom.sun.management.jmxremote</param>
<param condName="${java_vendor}" condValue="IBM">-Dcom.sun.management.jmxremote.authenticate=false</param>
<param condName="${java_vendor}" condValue="IBM">-Dcom.sun.management.jmxremote.ssl=false</param>
<param condName="${java_vendor}" condValue="IBM">-Dcom.sun.management.jmxremote.port=16165</param>
<param condName="${java_vendor}" condValue="IBM">-Dcom.sun.management.jmxremote.rmi.port=16165</param>
It will create a file disp_gc.log in your Cognos logs that you can use GC Easy to analyze. And you can connect VisualVM at port 16165 to see JVM behaviour in real time.
For query service and flint, you should use different ports other than 16165. I usually set to 16166 and 16167.
For this Query Service, at Admin Console > Configuration > Dispatchers and Services > Configuration > Query Service JVM Args, fill the field with
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=16166 -Dcom.sun.management.jmxremote.rmi.port=16166
For flint, at Admin Console > Configuration > Dispatchers and Services > Configuration > Advanced Configuration, add this parameter qs.queryExecution.flintServer.extraJavaOptions with value
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=16167 -Dcom.sun.management.jmxremote.rmi.port=16167
You may notice that in /logs/XQE folder, Cognos generates verbose for flint and query service by itself. You can upload to GC Easy either.
I have notice that Cognos use more young generation (nursery) than old gen. So I've balanced WLP and Query service to 75% nursery.
For flint is almost needed nursery. For example, with 12GB for flint, I set 10GB for nursery.
Other thing is that using IBM JRE, the bootstrap set to use a half memory set in Cognos Configuration.
You will see this king of thing {dispatcherMaxMemoryBy2}. I edited bootstrap to use all memory that I set. And I set -Xmn to a hard-coded value. For dispatcher install 75% of JVM size for nursery. For CM install, 50% for nursery.
I'm responsible for one of the biggest environments of Cognos, with 20k users and more than 180k report/dash executions per day. This metrics that I have and set, works very fine.