1. 检查ulimit, 使用命令:
ulimit -a
root@b7c19f6da1e3:/usr# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 63525
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1048576
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
core file size: unlimited, 没问题
2. 检查core文件生成位置+命名方式的系统设置,使用命令:
cat /proc/sys/kernel/core_pattern
root@b7c19f6da1e3:/usr# cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c %d %P %E
core dump被通过管道(|开头表示管道)给apport程序处理了(被截胡了),因此没生成core文件
3. 修改/proc/sys/kernel/core_pattern,使用命令:
echo "core" > /proc/sys/kernel/core_pattern
root@867cf149306a:/usr# echo "core" > /proc/sys/kernel/core_pattern
/proc/sys/kernel/core_pattern: Read-only file system
结果报错只读文件不能修改,看来是权限不够
4. 修改docker容器内root权限
在docker容器内,看似已经使用了root用户,有最大权限,实际还是一个被限制的普通用户。
想要开启高级权限,需要在创建、进入docker容器时,加上--privileged参数,其中:
a. 如果是用docker run创建启动容器,命令类似于
docker run -it --privileged=true –name containername
b. 如果是用docker-compose创建容器,需要在docker-compose.yaml配置文件中加上privileged: true
1 version: '3.8'
2 services:
3 myservice:
4 container_name: s1
5 image: service_image:latest
6 privileged: true
11 volumes:
12 - /etc/localtime:/etc/localtime:ro
然后在用docker exec进入时也带上--privileged参数,命令类似于
docker exec --privileged -w / -it s1 /bin/bash
5. 修改/proc/sys/kernel/core_pattern文件
root@b7c19f6da1e3:/usr# echo "core" > /proc/sys/kernel/core_pattern
root@b7c19f6da1e3:/usr# cat /proc/sys/kernel/core_pattern
core
至此,问题解决,需要注意的是
a. /proc/sys/kernel/core_pattern文件内容如果没带路径(一般都不带相对、绝对路径),core文件会生成在导致core文件的程序相同路径下
b. 可以用%t(时间), %p(pid)来命名core文件
root@b7c19f6da1e3:/btc/coretest# echo "core_%t_%p" > /proc/sys/kernel/core_pattern
root@b7c19f6da1e3:/btc/coretest# cat /proc/sys/kernel/core_pattern
core_%t_%p
root@b7c19f6da1e3:/btc/coretest# ll
total 128
drwxr-xr-x 2 root root 4096 Nov 15 16:45 ./
drwxr-xr-x 1 root root 4096 Nov 15 16:44 ../
-rw------- 1 root root 249856 Nov 15 16:45 core-1700037947-206
-rwxr-xr-x 1 root root 9480 Nov 15 16:45 test*
-rw-r--r-- 1 root root 65 Nov 15 16:45 test.c
root@b7c19f6da1e3:/btc/coretest# ./test
Segmentation fault (core dumped)
root@b7c19f6da1e3:/btc/coretest# ll
total 236
drwxr-xr-x 2 root root 4096 Nov 15 17:17 ./
drwxr-xr-x 1 root root 4096 Nov 15 16:44 ../
-rw------- 1 root root 249856 Nov 15 16:45 core-1700037947-206
-rw------- 1 root root 249856 Nov 15 17:17 core_1700039869_324
-rwxr-xr-x 1 root root 9480 Nov 15 16:45 test*
-rw-r--r-- 1 root root 65 Nov 15 16:45 test.c