基础参数:日志级别、工作目录、进程名、端口绑定
调参这件事,很多人一上来就盯着算法参数猛调,结果发现日志都没开,进程跑在哪都不知道。嗯,我见过不少新手在线上环境里翻车,就是因为这四个基础参数没配好。
今天咱们就把这四个参数掰开揉碎。它们不复杂,但它们是整个 THS-PREPARE 实例的“身份证”和“看门狗”。每个参数都有坑,我踩过的坑也不少。
日志级别
先说日志。有人觉得日志级别就是个开关,随便设个 info 就行。其实不是。我遇到过线上服务突然变慢,查了半天发现日志级别是 debug,每秒刷几万行日志,磁盘 IO 直接打满。
THS-PREPARE 提供了这几个级别,按严重程度排列:
| 级别 | 数值 | 典型场景 |
|---|---|---|
| TRACE | 0 | 追踪单次请求的完整路径,开发阶段用 |
| DEBUG | 1 | 定位具体模块的细节行为,调试用 |
| INFO | 2 | 记录正常流程的关键节点,生产默认推荐 |
| WARN | 3 | 发现异常但不需要立即处理的情况 |
| ERROR | 4 | 需要人工介入的故障,比如连接失败 |
| FATAL | 5 | 导致进程退出的严重错误 |
我个人习惯在生产环境里先设 INFO。如果某个模块有问题,再临时改成 DEBUG 或 TRACE。注意改完之后一定要复原,否则日志增长会很吓人。
# 配置文件示例:log_level.yml
global:
log_level: "INFO" # 生产推荐 INFO
log_format: "%d [%p] %c - %m%n"
log_path: "/var/log/ths-prepare/"
工作目录
工作目录,说白了就是进程启动后所在的根目录。很多临时文件、相对路径的配置文件都依赖于它。如果配错了,程序会找不到文件。
我见过一个案例:有人把工作目录设成了 /tmp,结果系统重启清空了 /tmp,所有运行时生成的缓存文件全部丢失,服务启动失败。真事。
# 启动命令中指定工作目录
ths-prepare --work-dir /opt/ths-prepare/work
# 或者写在配置文件中
work_dir: "/opt/ths-prepare/work"
另外要留意 Windows 和 Linux 的路径分隔符差异。我习惯统一用正斜杠,兼容性好。相对路径是以工作目录为基准的,所以脚本里尽量用路径,避免猜谜。
进程名
进程名的作用?举个例子:线上有十几个 THS-PREPARE 实例在跑,你用 ps aux | grep ths 一看全叫 ths-prepare,根本分不清谁是谁。
这时候就需要自定义进程名。我用 --proc-name 参数给它起个辨识度高的名字,比如 ths_reader_1、ths_writer_2。方便定位、也方便监控系统识别。
# 命令行启动
ths-prepare --proc-name "ths_reader_1" --config reader.yaml
# 实际上,进程名会显示为 ths_reader_1,而不是 ths-prepare
我曾经在一个集群里同时跑了 8 个实例,因为没给进程名,出问题的时候根本分不清日志和性能数据来自哪个实例。后来我加了个统一命名规范:项目名_角色_序号,比如 alert_digest_3。从此排查问题效率翻倍。
端口绑定
端口绑定,就是告诉 THS-PREPARE 实例在哪一个端口上监听外部请求。这个简单,但坑很多。
- 端口冲突:同一个端口只能被一个进程占用。如果你启动了两个实例都绑 8080,第二个会抛
Address already in use。 - 端口权限:Linux 下小于 1024 的端口需要 root 权限。我曾经想绑定 80 端口,结果忘了提权,服务一直起不来。
- 防火墙:绑了端口客户也连不上,大概率是防火墙没放行。这个是网络层面的坑,但也归到参数调试来排查。
# 配置端口
server:
bind: "0.0.0.0"
port: 8080
# 或者命令行
ths-prepare --port 8080
| 常见问题 | 排查方法 |
|---|---|
| 端口被占用 | netstat -tulnp | grep 端口号 |
| 无权限绑定 | 改用 1024 以上端口,或用 sudo 提权 |
| 客户端连不上 | 检查防火墙规则 + 确认 bind 地址不是 127.0.0.1 |
好了,这四个基础参数看似简单,却是整个 THS-PREPARE 稳定性与可维护性的地基。把日志级别、工作目录、进程名、端口绑定做对了,后续再调算法参数才能安心。你想想看,如果一个实例连名字都没有,出了事你都找不到它,还调什么优?