针对 Java 应用程序的并行处理

Java 分析程序现在使用并行分析技术,从而大大加快了 IRX 文件的生成速度。这种经过修改的分析方法还会将转换后的类文件缓存为客户机系统上的分析格式,从而分析已存储的副本,而不是在每次执行分析时都对其进行重建。

并行处理方式将代码划分成更易于扫描的更小片段,以进行分析。然后,可以同时扫描这些较小的代码段。这不仅可以减少占用的内存和 CPU 空间,而且可以更快地获得结果。

注: 并行处理是缺省行为。可以使用本主题中描述的属性进一步定制扫描,或关闭并行处理。

常规并行处理属性

要在运行 appscan prepare 的客户机中设置属性,请在该属性前加上 -D
注: 用于并行处理的命令行选项适用于 CLI 以及 Maven 和 Gradle 插件。
属性 描述
USE_SLICER

true|false

缺省值:true
设置为 true 时,将启用并行处理。
IRX_MINOR_CACHE_HOME $user.home/.appscan/irx_cache 指定文件高速缓存的位置。可在此处使用 Windows 映射驱动器和 UNC 驱动器或 Linux 安装。
DISABLE_CACHE True

缺省值:未设置

阻止使用高速缓存。这将强制在每个类文件上重新运行 IR 生成过程,即使有高速缓存条目也是如此。

示例

在启用并行处理的情况下运行,并将文件系统高速缓存存储在 $user.home/.appscan/irx_cache 中:
  • CLI
    $ appscan.sh prepare 
  • Gradle
    gradle appscan-prepare
  • Maven
    mvn com.hcl.security:appscan-maven-plugin:prepare
在启用并行处理的情况下运行,并避免使用高速缓存:
  • CLI
    $ appscan.sh prepare -DDISABLE_CACHE=true
  • Gradle
    gradle appscan-prepare -DDISABLE_CACHE=true
  • Maven
    mvn com.hcl.security:appscan-maven-plugin:prepare -DDISABLE_CACHE=true
设置文件高速缓存以使用 irx_cache 目录中的映射驱动器 s:
  • CLI
    > appscan.bat prepare -DIRX_MINOR_CACHE_HOME=s:\\irx_cache
  • Gradle
    gradle appscan-prepare -DIRX_MINOR_CACHE_HOME=s:\\irx_cache
  • Maven
    mvn com.hcl.security:appscan-maven-plugin:prepare -DIRX_MINOR_CACHE_HOME=s:\\irx_cache
在禁用并行处理的情况下运行:
  • CLI
    $ appscan.sh prepare -DUSE_SLICER=fals
  • Gradle
    gradle appscan-prepare -DUSE_SLICER=fals
  • Maven
    mvn com.hcl.security:appscan-maven-plugin:prepare -DUSE_SLICER=fals

日志

在并行处理过程中生成以下日志:
  • scan.manifest:该文件是在 IRX 文件生成过程中生成的,并会列出所有已发现的项目。它提供语言列表以及已针对每种语言扫描的工件。缺省情况下不包括第三方工件。
  • scan.mainfest.json:包含与 scan.manifest file 相同的 JSON 格式的信息,以便于解析。
  • StaticAnalyzer-Errors.slice.log 提供当未成功生成 IRX 文件时可能会在分段中发生的错误。它列出了分段编号以及对应于该分段的错误消息。如果此文件为空,则分段中没有与 IRX 文件生成过程相关的错误消息。

  • stage.stats.json:概述正在为 Java 分析的包、暂存的 zip 格式文件(earjarwarrar),以及抽取每个较大的 zip 格式文件所占用的内存。
  • slice.prepare.stats.json:包含每个类文件及其关联的存储区,以及它是否从高速缓存中检索。如果不是从高速缓存中检索,则为生成分段 IPVA 文件所用的时间。

存储桶

每个存储区在分段目录下都有一个文件夹,该文件夹具有一个编号(用作文件夹的名称)。在 slices/<language>/<bucket_number>/logs 目录中每个分段的 logs 目录下,有一个 scan.manifest 文件,其中列出了该存储桶中存在的工件和语言。

或者,slice.prepare.stats.json 文件包含要分析的每个类文件的存储桶关联信息。

结果

新的程序切片机制改变了一些发现签名,使其与以前略有不同。这可能会导致产生与已经分类的发现相似的发现。这种情况仅会在第一次对已经具有来自先前扫描机制的发现的应用程序运行程序切片分析时发生。它还可能需要一些其他发现才能被视为新发现,并需要像以前一样进行分类。