Skip to content
← 返回文件与文本处理列表
文件与文本处理任务与配置

编译构建、测试与运行诊断命令 · 运行测试、工作流与性能测量至从 Java 进程和线程定位运行问题 ​

返回分篇目录

运行测试、工作流与性能测量 ​

行为测试、CI 工作流、本地 HTTP 压测与分布式训练入口各自保留,不把所有工具当作同一种测试运行器。

behat · 基于 Behaviour-Driven Development 的自动化测试 PHP 框架 ​

更多信息:https://docs.behat.org/en/latest/user_guide/command_line_tool.html。

  • 初始化一个 PHP behat 项目:
bash
behat --init
  • 运行所有测试:
bash
behat
  • 运行指定组所有的测试用例:
bash
behat --suite {{组名}}
  • 运行所有测试,指定结果输出格式:
bash
behat --format {{pretty|progress}}
  • 将测试结果输出到指定文件:
bash
behat --out {{路径/到/文件}}
  • 展示测试组所在的目录清单:
bash
behat --definitions

act · 使用 Docker 本地运行 GitHub Actions ​

更多信息:https://manned.org/act。

  • 列出可用的 actions 清单:
bash
act -l
  • 运行默认 event:
bash
act
  • 运行指定 event:
bash
act {{event_type}}
  • 运行指定 action:
bash
act -a {{action_id}}
  • 非实际运行 actions(也就是 dry-run 模式):
bash
act -n
  • 展示详细记录:
bash
act -v
  • 运行指定 workflow:
bash
act push -W {{workflow 的路径}}

ab · Apache 基准测试工具 ​

更多信息:https://httpd.apache.org/docs/current/programs/ab.html。

  • 向目标 URL 执行 100 次 HTTP GET 请求:
bash
ab -n 100 {{url}}
  • 使用 10 个并发请求,同时向目标 URL 执行 100 次 HTTP GET 请求:
bash
ab -n 100 -c 10 {{url}}
  • 使用来自文件的 JSON 负载对 URL 执行 100 个 HTTP POST 请求:
bash
ab -n 100 -T {{application/json}} -p {{path/to/file.json}} {{url}}
  • 使用 HTTP [K]eep Alive,即在一个 HTTP 会话中执行多个请求:
bash
ab -k {{url}}
  • 为基准测试设置最大的测试时间(单位:秒):
bash
ab -t {{60}} {{url}}
  • 将结果写入到一个 CSV 文件中:
bash
ab -n 100 -e {{路径/到/文件.csv}} {{url}}

jmeter · 开源的 Java 应用程序,旨在对功能行为进行负载测试并衡量性能 ​

更多信息:https://jmeter.apache.org/usermanual/get-started.html#options。

  • 在非 GUI 模式下运行指定的测试计划:
bash
jmeter {{[-n|--nongui]}} {{[-t|--testfile]}} {{路径/到/文件.jmx}}
  • 在非 GUI 模式下使用指定的日志文件运行测试计划:
bash
jmeter {{[-n|--nongui]}} {{[-t|--testfile]}} {{路径/到/文件.jmx}} {{[-l|--logfile]}} {{路径/到/日志文件.jtl}}
  • 在非 GUI 模式下使用指定代理运行测试计划:
bash
jmeter {{[-n|--nongui]}} {{[-t|--testfile]}} {{路径/到/文件.jmx}} {{[-H|--proxyHost]}} {{127.0.0.1}} {{[-P|--proxyPort]}} {{8888}}
  • 在非 GUI 模式下使用指定的 JMeter 属性运行测试计划:
bash
jmeter {{[-n|--nongui]}} {{[-t|--testfile]}} {{路径/到/文件.jmx}} {{[-J|--jmeterproperty]}} {{键}}='{{值}}'

accelerate · 一个使得可以在任何分布式配置中运行相同的 PyTorch 代码的库 ​

更多信息:https://huggingface.co/docs/accelerate/index。

  • 打印环境信息:
bash
accelerate env
  • 交互式地创建配置文件:
bash
accelerate config
  • 打印使用不同数据类型运行 Hugging Face 模型的估计 GPU 内存成本:
bash
accelerate estimate-memory {{名字/模型}}
  • 测试一个 Accelerate 配置文件:
bash
accelerate test --config_file {{路径/到/配置文件.yaml}}
  • 使用 Accelerate 在 CPU 上运行一个模型:
bash
accelerate launch {{路径/到/脚本.py}} {{--cpu}}
  • 使用 Accelerate 在多 GPU 上运行一个模型,使用 2 台机器:
bash
accelerate launch {{路径/到/脚本.py}} --multi_gpu --num_machines 2

从 Java 进程和线程定位运行问题 ​

先找到进程,再看线程、堆和深度调试;Arthas 的总入口、trace 与 watch 按操作层次相邻。jstack 混合栈/核心转储、jmap 的旧选项与 jhat 片段来自旧 JDK,不能按同页 JDK 25 链接视为全部仍可用;使用前匹配实际 JDK 手册。

jps · 显示当前用户的 JVM 进程状态 ​

更多信息:https://docs.oracle.com/en/java/javase/25/docs/specs/man/jps.html。

  • 列出所有 JVM 进程:
bash
jps
  • 列出所有 JVM 进程,只打印进程号:
bash
jps -q
  • 显示传递给进程的参数:
bash
jps -m
  • 显示所有进程的完整软件包名称:
bash
jps -l
  • 显示传递给 JVM 的参数:
bash
jps -v

jstack · Java 栈跟踪工具 ​

更多信息:https://manned.org/jstack。

  • 打印 Java 进程中所有线程的 Java 栈跟踪:
bash
jstack {{java_进程号}}
  • 打印混合模式(Java/C++)的栈跟踪:
bash
jstack -m {{java_进程号}}
  • 打印来自 Java 核心转储的栈跟踪:
bash
jstack {{/usr/bin/java}} {{文件.core}}

jmap · Java 内存映射工具 ​

更多信息:https://docs.oracle.com/en/java/javase/25/docs/specs/man/jmap.html。

  • 打印 Java 进程的共享对象映射(类似 pmap 的输出):
bash
jmap {{Java 进程号}}
  • 打印堆摘要信息(旧 JDK 8 jmap 语法,见 JDK 8 手册):
bash
jmap -heap {{Java 进程号}}
  • 按类型打印堆使用的直方图:
bash
jmap -histo {{Java 进程号}}
  • 将堆的内容转储到二进制文件中以使用 jhat 进行分析:
bash
jmap -dump:format=b,file={{路径/到/文件}} {{Java 进程号}}
  • 将堆中存活的对象转储到二进制文件中以使用 jhat 进行分析:
bash
jmap -dump:live,format=b,file={{路径/到/文件}} {{Java 进程号}}

jhat · Java 堆分析工具 ​

更多信息:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jhat.html。

  • 分析堆转储文件(来自 jmap),通过 HTTP 端口 7000 进行查看:
bash
jhat {{路径/堆转储文件}}
  • 分析堆转储文件,为 HTTP 服务指定备用端口:
bash
jhat {{[-p|-port]}} {{端口}} {{路径/堆转储文件}}
  • 通过 jhat 分析转储文件,指定使用 8GB RAM(建议使用 2-4 倍的转储大小):
bash
jhat -J-mx8G {{路径/堆转储文件}}

jhsdb · 附加到一个 Java 进程或启动一个事后调试器来分析崩溃的 Java 虚拟机的核心转储 ​

更多信息:https://manned.org/jhsdb。

  • 打印 Java 进程的堆栈和锁信息:
bash
jhsdb jstack --pid {{进程id}}
  • 在交互式调试模式下打开一个核心转储:
bash
jhsdb clhsdb --core {{路径/到/core_dump}} --exe {{路径/到/jdk/bin/java}}
  • 启动远程调试服务器:
bash
jhsdb debugd --pid {{进程id}} --serverid {{可选的唯一标识}}
  • 在交互式调试模式下连接到一个进程:
bash
jhsdb clhsdb --pid {{进程id}}

arthas · Java 应用诊断利器 ​

另请参阅:arthas-watch, arthas-trace。 更多信息:https://arthas.aliyun.com/en/。

  • 启动 arthas:
bash
java -jar {{路径/到/arthas-boot.jar}}
  • 重连 arthas (默认 3658 端口):
bash
telnet localhost {{端口号}}
  • 退出当前 arthas 客户端的连接,但不停止 arthas 服务:
bash
{{exit|quit|logout|q}}
  • 停止 arthas 服务,断开所有 arthas 客户端的连接:
bash
stop

arthas-trace · 方法内部调用路径,并输出方法路径上的每个节点上耗时 ​

另请参阅:arthas, arthas-watch。 更多信息:https://arthas.aliyun.com/en/doc/trace.html。

  • 追踪方法调用链:
bash
trace {{class-pattern}} {{method-pattern}}
  • 追踪方法调用链,仅显示大于 10 毫秒的调用:
bash
trace {{class-pattern}} {{method-pattern}} '#cost > {{10}}'
  • 追踪多个类和方法的调用:
bash
trace -E {{class-pattern1}}|{{class-patter2}} {{method-pattern1}}|{{method-pattern2}}|{{method-pattern3}}
  • 仅显示大于 10 毫秒的调用链,观测 5 次:
bash
trace {{class-pattern}} {{method-pattern}} '#cost > {{10}}' -n 5

arthas-watch · 函数执行数据观测 ​

另请参阅:arthas, arthas-trace。 更多信息:https://arthas.aliyun.com/en/doc/watch.html。

  • 在方法调用后观察,显示第一个参数和返回值,展开嵌套对象的 4 层:
bash
watch {{class-pattern}} {{method-pattern}} '{{{ params[0],returnObj }}}' -x 4
  • 在方法调用后观测,当第一个参数的值是 5 时,显示第二个参数和返回值,展开嵌套对象的 4 层:
bash
watch {{class-pattern}} {{method-pattern}} '{{{ params[1],returnObj }}}' '{{"5".equals(params[0])}}' -x 4
  • 在方法返回和异常后观测,显示第二个参数的 count 属性:
bash
watch {{class-pattern}} {{method-pattern}} '{{{ params[1].count }}}' -e -s

javap · 反汇编类文件并列出它们 ​

更多信息:https://docs.oracle.com/en/java/javase/25/docs/specs/man/javap.html。

  • 反汇编并列出一个或多个 .class 文件:
bash
javap {{路径/到/file1.class 路径/到/file2.class ...}}
  • 反汇编并列出一个内置类文件:
bash
javap java.{{包}}.{{类}}
  • 显示帮助:
bash
javap -help
  • 显示版本信息:
bash
javap -version

jdeps · Java 类依赖分析器 ​

更多信息:https://docs.oracle.com/en/java/javase/25/docs/specs/man/jdeps.html。

  • 分析 .jar 或 .class 文件的依赖关系:
bash
jdeps {{路径/到/文件名.class}}
  • 打印特定 .jar 文件的所有依赖关系摘要:
bash
jdeps {{路径/到/文件名.jar}} -summary
  • 打印 .jar 文件的所有类级依赖关系:
bash
jdeps {{路径/到/文件名.jar}} -verbose
  • 将分析结果输出为 DOT 文件到指定目录:
bash
jdeps {{路径/到/文件名.jar}} -dotoutput {{路径/到/目录}}
  • 显示帮助:
bash
jdeps --help

继续阅读