简体   繁体   English

2G是Linux上coredump文件的限制大小吗?

[英]Is 2G the limit size of coredump file on Linux?

My OS is Arch Linux . 我的操作系统是Arch Linux When there is a coredump, I try to use gdb to debug it: 当有一个核心转储时,我尝试使用gdb对其进行调试:

$ coredumpctl gdb 1621
......
       Storage: /var/lib/systemd/coredump/core.runTests.1014.b43166f4bba84bcba55e65ae9460beff.1621.1491901119000000000000.lz4
       Message: Process 1621 (runTests) of user 1014 dumped core.

                Stack trace of thread 1621:
                #0  0x00007ff1c0fcfa10 n/a (n/a)

GNU gdb (GDB) 7.12.1
......
Reading symbols from /home/xiaonan/Project/privDB/build/bin/runTests...done.
BFD: Warning: /var/tmp/coredump-28KzRc is truncated: expected core file size >= 2179375104, found: 2147483648.

I check the /var/tmp/coredump-28KzRc file: 我检查了/var/tmp/coredump-28KzRc文件:

$ ls -alth /var/tmp/coredump-28KzRc
-rw------- 1 xiaonan xiaonan 2.0G Apr 11 17:00 /var/tmp/coredump-28KzRc

Is 2G the limit size of coredump file on Linux? 2G是Linux上coredump文件的限制大小吗? Because I think my /var/tmp has enough disk space to use: 因为我认为/var/tmp有足够的磁盘空间可以使用:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
dev              32G     0   32G   0% /dev
run              32G  3.1M   32G   1% /run
/dev/sda2       229G   86G  132G  40% /
tmpfs            32G  708M   31G   3% /dev/shm
tmpfs            32G     0   32G   0% /sys/fs/cgroup
tmpfs            32G  957M   31G   3% /tmp
/dev/sda1       511M   33M  479M   7% /boot
/dev/sda3       651G  478G  141G  78% /home

PS " ulimit -a " outputs: PS“ ulimit -a ”输出:

$ 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) 257039
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
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) 257039
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Update: The /etc/systemd/coredump.conf file: 更新: /etc/systemd/coredump.conf文件:

$ cat coredump.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See coredump.conf(5) for details.

[Coredump]
#Storage=external
#Compress=yes
#ProcessSizeMax=2G
#ExternalSizeMax=2G
#JournalSizeMax=767M
#MaxUse=
#KeepFree=

@nm is correct. @nm是正确的。
(1) Modify /etc/systemd/coredump.conf file: (1)修改/etc/systemd/coredump.conf文件:

[Coredump]
ProcessSizeMax=8G
ExternalSizeMax=8G
JournalSizeMax=8G

(2) Reload systemd's configuration: (2)重新加载systemd的配置:

# systemctl daemon-reload

Notice this will only take effect for the new generated core dump files. 请注意,这仅对新生成的核心转储文件有效。

Is 2G the limit size of coredump file on Linux? 2G是Linux上coredump文件的限制大小吗?

No. I routinely deal with core dumps larger than 4GiB. 不。我通常会处理大于4GiB的核心转储。

ulimit -a
core file size (blocks, -c) unlimited

This tells you your current limit in this shell. 这告诉您当前在此shell中的限制。 It tells you nothing about the environment in which runTests ran. 不会告诉您有关runTests运行的环境的任何信息。 That process may be setting its own limit via setrlimit(2) , or its parent may be setting a limit for it. 该进程可以通过setrlimit(2)设置自己的限制,或者它的父进程可以为此设置一个限制。

You can modify runTest to print its current limit with getrlimit(2) and see what it actually is when the process runs. 您可以使用getrlimit(2)修改runTest以显示其当前限制,并查看该进程运行时的实际getrlimit(2)

PS Just because the core is truncated doesn't mean it's completely useless (though often it is). PS仅仅因为core被截断并不意味着它是完全没用的(尽管通常是这样)。 At a minimum, you should try the GDB where command. 至少,您应该尝试使用GDB where命令。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM