feat: 新增 java run,按 JDK 版本自动套用调优参数运行 Java 应用

- 自动识别 JDK 8/11/17/21 与宿主机 CPU、可用内存;容器内以 cgroup
  限额为准;堆默认取可用内存 50%,-Xms 与 -Xmx 同值
- 按版本分支生成参数:JDK 8 用 -Xloggc 一组,JDK 9+ 用 -Xlog:;
  堆超过 30g 时自动省略压缩指针参数
- 支持 --jdk/--java/--heap/--xms/--env/--gc-log/--heap-dump-on-oom/
  --print-flags/--dry-run;jar 之后的参数原样交给应用
- 前台运行:stdio 直连、退出码透传、SIGINT/SIGTERM 转发给 JVM
- BuiltinRequest 增加 Stdin,使内置命令可以读取调用方输入
- 修正帮助中的用法行重复(自定义 Usage 不再追加通用透传尾巴)
- 文档:新增 README.java.md,主 README 补充导航与示例
This commit is contained in:
2026-11-01 09:16:19 +08:00
parent 14817bcfe7
commit f62c1f4872
16 changed files with 2139 additions and 7 deletions
+9 -2
View File
@@ -14,6 +14,7 @@ import (
// in-process command implementation.
type BuiltinRequest struct {
Args []string
Stdin io.Reader
Stdout io.Writer
Stderr io.Writer
Info platform.Info
@@ -42,6 +43,8 @@ var builtins = map[string]Builtin{
"docker.save": runDockerSave,
"docker.stats": runDockerStats,
"docker.stop": runDockerStop,
"java.run": runJavaRun,
"java.run.preview": runJavaPreview,
"net.pids": runNetPIDs,
"net.ports": runNetPorts,
"proc.nohup": runNohup,
@@ -72,7 +75,7 @@ func Preview(ctx context.Context, plan Plan, w io.Writer) error {
return fmt.Errorf("未注册的确认动作 %q", name)
}
// Build the list in memory first: a target that fails to resolve must not
// leave a dangling "将影响:" heading behind.
// leave a dangling heading behind.
var buf bytes.Buffer
if err := fn(ctx, BuiltinRequest{
Args: plan.ExtraArgs,
@@ -83,7 +86,11 @@ func Preview(ctx context.Context, plan Plan, w io.Writer) error {
}); err != nil {
return err
}
fmt.Fprintln(w, "将影响:")
// Only destructive commands act on a list of objects; other previews (such
// as the java command line) already carry their own heading.
if plan.Result.Command != nil && plan.Result.Command.RequiresYes {
fmt.Fprintln(w, "将影响:")
}
_, err := w.Write(buf.Bytes())
return err
}