Go程序time.Ticker运行6个月后突然停止发送tick求助
Go守护进程Ticker冻结排查求助
我搜索许久未找到相关记录,这个罕见问题并非首次出现。我编写了一个Go守护进程(使用go1.20.4 linux/amd64编译),通过time.NewTicker每日从外部API同步数据,核心代码如下:
ticker := time.NewTicker(config.CollectionPollInterval) defer ticker.Stop() for { select { case <-ctx.Done(): return nil case <-ticker.C: if err := syncAllCollections(); err != nil { return err } } }
其中config.CollectionPollInterval为24小时。该程序以systemd服务运行,正常运行6个月后,日志显示最后一次同步发生在11月2日,之后进程完全冻结。我通过调试器发现进程卡在select语句,查看ticker变量时,其when字段值异常,曾考虑过int64溢出但不合理。目前无法复现该问题,进程仍挂着调试器,寻求排查建议。
补充信息
- 二进制编译版本:go1.20.4
- go.mod内容:
module my_package go 1.13 require ( github.com/jackc/pgtype v1.3.0 github.com/jackc/pgx/v4 v4.6.0 )
- systemd服务状态:
$ systemctl status my-go-process.service ● my-go-process.service - daemon Loaded: loaded (/lib/systemd/system/my-go-process.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-05-16 09:56:56 UTC; 6 months 8 days ago Main PID: 377922 (my-go-process) Tasks: 14 (limit: 38269) Memory: 5.0M CGroup: /system.slice/my-go-process.service └─377922 /usr/local/bin/my-go-process -config-file /home/config.json Nov 02 09:57:21 tot my-go-process[377922]: 2023/11/02 09:57:21 main.go:89: *********** Nov 02 09:57:21 tot my-go-process[377922]: 2023/11/02 09:57:21 main.go:96: *********** Nov 02 09:57:21 tot my-go-process[377922]: 2023/11/02 09:57:21 main.go:89: *********** Nov 02 09:57:22 tot my-go-process[377922]: 2023/11/02 09:57:22 main.go:96: *********** Nov 02 09:57:22 tot my-go-process[377922]: 2023/11/02 09:57:22 main.go:89: *********** Nov 02 09:57:22 tot my-go-process[377922]: 2023/11/02 09:57:22 main.go:96: *********** Nov 02 09:57:22 tot my-go-process[377922]: 2023/11/02 09:57:22 main.go:89: *********** Nov 02 09:57:23 tot my-go-process[377922]: 2023/11/02 09:57:23 main.go:96: *********** Nov 02 09:57:23 tot my-go-process[377922]: 2023/11/02 09:57:23 main.go:89: *********** Nov 02 09:57:23 tot my-go-process[377922]: 2023/11/02 09:57:23 main.go:96: ***********
- systemd Unit文件:
[Unit] Description=daemon After=network.target postgresql@11-main.service [Service] Type=simple User=user ExecStart=/usr/local/bin/my-go-process -config-file ${HOME}/config.json [Install] WantedBy=multi-user.target
内容的提问来源于stack exchange,提问作者geniass
相关产品推荐
相关产品推荐

