Local machine’s characteristics and KLA configuration

As said before, if your source code contains Java, Javascript and JSP files, there will be 9 steps (rules, metrics and duplication analysis for every technology).

 

Every analysis step is accomplished by executing a new JVM.

Below follows some considerations you must bear in mind to properly configure your analyses.


Java Virtual Machine


Every step is performed through the execution of a JVM process.

Java 8 (64 bits) or above —either JDK or JRE— is required.

 
 

IMPORTANT for LINUX/UNIX users:

Please check /dev/random configuration of JVM. This may produce severe performance problems (java urandom Entropy).

Below link will help you to fix it:

 

By default, KLA comes with pre-configured default values:

These parameters are configured through KLA configuration mechanism, please do not modify KLA scripts to include JVM flags such as -Xmx, use the mechanisms Kiuwan provides.


Single and parallel execution of analyses


Every Kiuwan analysis executes sequentially, i.e. every step is executed sequentially and following the order specified above:

  1. For every technology

    1. rule analysis

    2. metrics analysis

    3. clone detection

  2. Report generation, encryption and uploading to Kiuwan cloud


Every step is executed by a “new” JVM, and Kiuwan configuration applies to all of those JVM instances.

Therefore, those memory-cpu consuming steps may result in full use (near to 100%) of a CPU core.


If the machine running KLA analyses contains more available CPUs, you can run “simultaneous” (or parallel) analyses by executing additional instances of KLA.

In a parallel KLA execution scenario, every running analysis is completely independent from each other, so you can execute multiple analysis provided your machine has enough CPUs.



Memory configuration


By default, KLA comes pre-configured with the following memory default values (analyzer.properties):

 

# Starting size for heap memory (128m = 128 Megabytes)
memory.start=128m
# Maximum size for heap memory (1024m = 1 Gigabyte)
memory.max=1024m
# Stack memory, per thread (1024k = 1 Megabyte)
stack.size=2048k

 

If you notice that your local analysis ends with an Out of Memory (OOM) error, you need to increase the max memory allocated to the JVM (by default, 1Gb).


Below troubleshooting links can help you to identify OOM errors:

 

You can configure Kiuwan to increase memory limits either for the whole installation or per application.

 
 

ATTENTION:

Depending on your available physical memory available, OS and JVM version, if you increase the max memory the JVM might not start (please see https://www.kiuwan.com/docs/display/K5/Not+enough+Memory).

In these cases, stopping unneeded processes (or restarting the machine) can free unneeded allocated memory. Nevertheless, sometimes this does not free memory so you need to test with lower memory values.

 

Although you were not getting an OOM, if you notice the process is performing a high activity of JVM garbage collection, this situation may indicate your analysis needs more memory and the performance is suffering due to gc activity. In theses cases, try to increase the max memory, most probably the analysis performance will be faster.

 

IMPORTANT:

Do not increase indefinitely the memory.

If you see that your analysis needs more than 2GB to finish, it might be a clue of an existing memory leak or some other strange situation.

In this case, do not hesitate to contact Kiuwan Technical Support and report this situation.

 


Max time (timeout) configuration


By default, every step of a local analysis is confgiured to a default max execution time (60 minutes) (analyzer.properties):

 

# Timeout to use for max execution time of each analysis step (in msecs)
 timeout=3600000

 

Default value (1 hour) is often enough for most of the analyses, but depending on several circumstances (code size, memory, ruleset, etc) could not be enough and a Timeout error occurs (https://www.kiuwan.com/docs/display/K5/Timeout+killed+the+subprocess ).


In this cases, increase the default value.

As you can imagine, timeout is closely related to available memoryA short value of max memory may produce timeouts due to garbage collection if the amount of memory required by the analysis is high.