编译构建、测试与运行诊断命令 · 运行测试、工作流与性能测量至从 Java 进程和线程定位运行问题
运行测试、工作流与性能测量
行为测试、CI 工作流、本地 HTTP 压测与分布式训练入口各自保留,不把所有工具当作同一种测试运行器。
behat · 基于 Behaviour-Driven Development 的自动化测试 PHP 框架
更多信息:https://docs.behat.org/en/latest/user_guide/command_line_tool.html。
- 初始化一个 PHP behat 项目:
behat --init- 运行所有测试:
behat- 运行指定组所有的测试用例:
behat --suite {{组名}}- 运行所有测试,指定结果输出格式:
behat --format {{pretty|progress}}- 将测试结果输出到指定文件:
behat --out {{路径/到/文件}}- 展示测试组所在的目录清单:
behat --definitionsact · 使用 Docker 本地运行 GitHub Actions
更多信息:https://manned.org/act。
- 列出可用的 actions 清单:
act -l- 运行默认 event:
act- 运行指定 event:
act {{event_type}}- 运行指定 action:
act -a {{action_id}}- 非实际运行 actions(也就是 dry-run 模式):
act -n- 展示详细记录:
act -v- 运行指定 workflow:
act push -W {{workflow 的路径}}ab · Apache 基准测试工具
更多信息:https://httpd.apache.org/docs/current/programs/ab.html。
- 向目标 URL 执行 100 次 HTTP GET 请求:
ab -n 100 {{url}}- 使用 10 个并发请求,同时向目标 URL 执行 100 次 HTTP GET 请求:
ab -n 100 -c 10 {{url}}- 使用来自文件的 JSON 负载对 URL 执行 100 个 HTTP POST 请求:
ab -n 100 -T {{application/json}} -p {{path/to/file.json}} {{url}}- 使用 HTTP [K]eep Alive,即在一个 HTTP 会话中执行多个请求:
ab -k {{url}}- 为基准测试设置最大的测试时间(单位:秒):
ab -t {{60}} {{url}}- 将结果写入到一个 CSV 文件中:
ab -n 100 -e {{路径/到/文件.csv}} {{url}}jmeter · 开源的 Java 应用程序,旨在对功能行为进行负载测试并衡量性能
更多信息:https://jmeter.apache.org/usermanual/get-started.html#options。
- 在非 GUI 模式下运行指定的测试计划:
jmeter {{[-n|--nongui]}} {{[-t|--testfile]}} {{路径/到/文件.jmx}}- 在非 GUI 模式下使用指定的日志文件运行测试计划:
jmeter {{[-n|--nongui]}} {{[-t|--testfile]}} {{路径/到/文件.jmx}} {{[-l|--logfile]}} {{路径/到/日志文件.jtl}}- 在非 GUI 模式下使用指定代理运行测试计划:
jmeter {{[-n|--nongui]}} {{[-t|--testfile]}} {{路径/到/文件.jmx}} {{[-H|--proxyHost]}} {{127.0.0.1}} {{[-P|--proxyPort]}} {{8888}}- 在非 GUI 模式下使用指定的 JMeter 属性运行测试计划:
jmeter {{[-n|--nongui]}} {{[-t|--testfile]}} {{路径/到/文件.jmx}} {{[-J|--jmeterproperty]}} {{键}}='{{值}}'accelerate · 一个使得可以在任何分布式配置中运行相同的 PyTorch 代码的库
- 打印环境信息:
accelerate env- 交互式地创建配置文件:
accelerate config- 打印使用不同数据类型运行 Hugging Face 模型的估计 GPU 内存成本:
accelerate estimate-memory {{名字/模型}}- 测试一个 Accelerate 配置文件:
accelerate test --config_file {{路径/到/配置文件.yaml}}- 使用 Accelerate 在 CPU 上运行一个模型:
accelerate launch {{路径/到/脚本.py}} {{--cpu}}- 使用 Accelerate 在多 GPU 上运行一个模型,使用 2 台机器:
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 进程:
jps- 列出所有 JVM 进程,只打印进程号:
jps -q- 显示传递给进程的参数:
jps -m- 显示所有进程的完整软件包名称:
jps -l- 显示传递给 JVM 的参数:
jps -vjstack · Java 栈跟踪工具
- 打印 Java 进程中所有线程的 Java 栈跟踪:
jstack {{java_进程号}}- 打印混合模式(Java/C++)的栈跟踪:
jstack -m {{java_进程号}}- 打印来自 Java 核心转储的栈跟踪:
jstack {{/usr/bin/java}} {{文件.core}}jmap · Java 内存映射工具
更多信息:https://docs.oracle.com/en/java/javase/25/docs/specs/man/jmap.html。
- 打印 Java 进程的共享对象映射(类似 pmap 的输出):
jmap {{Java 进程号}}- 打印堆摘要信息(旧 JDK 8 jmap 语法,见 JDK 8 手册):
jmap -heap {{Java 进程号}}- 按类型打印堆使用的直方图:
jmap -histo {{Java 进程号}}- 将堆的内容转储到二进制文件中以使用 jhat 进行分析:
jmap -dump:format=b,file={{路径/到/文件}} {{Java 进程号}}- 将堆中存活的对象转储到二进制文件中以使用 jhat 进行分析:
jmap -dump:live,format=b,file={{路径/到/文件}} {{Java 进程号}}jhat · Java 堆分析工具
更多信息:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jhat.html。
- 分析堆转储文件(来自 jmap),通过 HTTP 端口 7000 进行查看:
jhat {{路径/堆转储文件}}- 分析堆转储文件,为 HTTP 服务指定备用端口:
jhat {{[-p|-port]}} {{端口}} {{路径/堆转储文件}}- 通过 jhat 分析转储文件,指定使用 8GB RAM(建议使用 2-4 倍的转储大小):
jhat -J-mx8G {{路径/堆转储文件}}jhsdb · 附加到一个 Java 进程或启动一个事后调试器来分析崩溃的 Java 虚拟机的核心转储
更多信息:https://manned.org/jhsdb。
- 打印 Java 进程的堆栈和锁信息:
jhsdb jstack --pid {{进程id}}- 在交互式调试模式下打开一个核心转储:
jhsdb clhsdb --core {{路径/到/core_dump}} --exe {{路径/到/jdk/bin/java}}- 启动远程调试服务器:
jhsdb debugd --pid {{进程id}} --serverid {{可选的唯一标识}}- 在交互式调试模式下连接到一个进程:
jhsdb clhsdb --pid {{进程id}}arthas · Java 应用诊断利器
另请参阅:
arthas-watch,arthas-trace。 更多信息:https://arthas.aliyun.com/en/。
- 启动 arthas:
java -jar {{路径/到/arthas-boot.jar}}- 重连 arthas (默认 3658 端口):
telnet localhost {{端口号}}- 退出当前 arthas 客户端的连接,但不停止 arthas 服务:
{{exit|quit|logout|q}}- 停止 arthas 服务,断开所有 arthas 客户端的连接:
stoparthas-trace · 方法内部调用路径,并输出方法路径上的每个节点上耗时
另请参阅:
arthas,arthas-watch。 更多信息:https://arthas.aliyun.com/en/doc/trace.html。
- 追踪方法调用链:
trace {{class-pattern}} {{method-pattern}}- 追踪方法调用链,仅显示大于 10 毫秒的调用:
trace {{class-pattern}} {{method-pattern}} '#cost > {{10}}'- 追踪多个类和方法的调用:
trace -E {{class-pattern1}}|{{class-patter2}} {{method-pattern1}}|{{method-pattern2}}|{{method-pattern3}}- 仅显示大于 10 毫秒的调用链,观测 5 次:
trace {{class-pattern}} {{method-pattern}} '#cost > {{10}}' -n 5arthas-watch · 函数执行数据观测
另请参阅:
arthas,arthas-trace。 更多信息:https://arthas.aliyun.com/en/doc/watch.html。
- 在方法调用后观察,显示第一个参数和返回值,展开嵌套对象的 4 层:
watch {{class-pattern}} {{method-pattern}} '{{{ params[0],returnObj }}}' -x 4- 在方法调用后观测,当第一个参数的值是 5 时,显示第二个参数和返回值,展开嵌套对象的 4 层:
watch {{class-pattern}} {{method-pattern}} '{{{ params[1],returnObj }}}' '{{"5".equals(params[0])}}' -x 4- 在方法返回和异常后观测,显示第二个参数的 count 属性:
watch {{class-pattern}} {{method-pattern}} '{{{ params[1].count }}}' -e -sjavap · 反汇编类文件并列出它们
更多信息:https://docs.oracle.com/en/java/javase/25/docs/specs/man/javap.html。
- 反汇编并列出一个或多个
.class文件:
javap {{路径/到/file1.class 路径/到/file2.class ...}}- 反汇编并列出一个内置类文件:
javap java.{{包}}.{{类}}- 显示帮助:
javap -help- 显示版本信息:
javap -versionjdeps · Java 类依赖分析器
更多信息:https://docs.oracle.com/en/java/javase/25/docs/specs/man/jdeps.html。
- 分析
.jar或.class文件的依赖关系:
jdeps {{路径/到/文件名.class}}- 打印特定
.jar文件的所有依赖关系摘要:
jdeps {{路径/到/文件名.jar}} -summary- 打印
.jar文件的所有类级依赖关系:
jdeps {{路径/到/文件名.jar}} -verbose- 将分析结果输出为 DOT 文件到指定目录:
jdeps {{路径/到/文件名.jar}} -dotoutput {{路径/到/目录}}- 显示帮助:
jdeps --help继续阅读
- 文件与文本处理完整实践与解答
- 文件与文本处理上手与对象
- 文件与文本处理任务与配置