开启core文件功能
- 设置core文件限制大小
使用ulimit -c
可以查看core文件限制大小,一般来说,默认为0,这种是不能生成core文件的。
使用下面的命令改为无限制。# ulimit -c unlimited # 针对当前终端此次会话有效
- 设置 GOTRACEBACK 环境变量值为 crash
# export GOTRACEBACK=crash # 针对当前终端此次会话有效 # env | grep GOTRACEBACK GOTRACEBACK=crash
如果需要针对当前用户一直生效,那么需要在 ~/.bash_profile
追加:
ulimit -c unlimited
GOTRACEBACK=crash
如果需要针对所有用户生效,那么需要在 /etc/profile
追加:
ulimit -c unlimited
GOTRACEBACK=crash
然后再对应执行source ~/.bash_profile
或者 source /etc/profile
测试:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "hello world\n")
})
log.Fatal(http.ListenAndServe("localhost:7777", nil))
}
编译运行,然后键盘敲 Ctrl + \,会发现当前目录生成了core文件。
控制core文件格式
在 /proc/sys/kernel/core_pattern
可以设置格式化的core文件保存位置和文件名。
比如:core-%e-%p-%t
表示在当前目录生成 "core-命令-pid-时间戳" 为文件名的core文件
比如:/cfg/core-%e-%p-%t
表示在/cfg下生成 "core-命令-pid-时间戳" 为文件名的core文件
注意:/proc/sys/kernel/core_pattern
不能直接编辑,可以用 echo core-%e-%p-%t > /proc/sys/kernel/core_pattern
符号 | 意义 |
---|---|
%p | insert pid into filename 添加 pid |
%u | insert current uid into filename 添加当前 uid |
%g | insert current gid into filename 添加当前 gid |
%s | insert signal that caused the coredump into the filename 添加导致产生 core 的信号 |
%t | insert UNIX time that the coredump occurred into filename 添加 core 文件生成时的 unix 时间戳 |
%h | insert hostname where the coredump happened into filename 添加主机名 |
%e | insert coredumping executable name into filename 添加命令名 |
网友评论