Является ли 2G предельным размером файла coredump в Linux?

Моя ОС Arch Linux. Когда есть дамп ядра, я пытаюсь использовать 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.

Я проверяю файл /var/tmp/coredump-28KzRc:

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

Является ли 2G предельным размером файла дампа памяти в Linux? Потому что я думаю, что на моем /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

P.S. "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

Обновление: файл /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=

person Nan Xiao    schedule 11.04.2017    source источник
comment
Можете ли вы на самом деле создать достаточно большой файл в своей файловой системе?   -  person    schedule 11.04.2017
comment
@SergeiKurenkov: да, я использую dd if=/dev/zero of=test bs=1024 count=4MB для создания файла 4G.   -  person Nan Xiao    schedule 11.04.2017
comment
Здесь stackoverflow.com/questions/8768719/ предлагается проверить также ulimit -f   -  person    schedule 11.04.2017
comment
Вывести все ulimit, вроде не исключение.   -  person Nan Xiao    schedule 11.04.2017
comment
Смотри, в gdb нет ограничений. Эта простая тестовая программа создает на моем ПК основной файл размером 4 ГБ: int main() { int *p = new int[1000000000]; интервал *q = nullptr; *д = *д +1; }   -  person    schedule 11.04.2017
comment
Можете ли вы показать нам свои файлы coredump.conf?   -  person Mark Plotnick    schedule 11.04.2017
comment
@MarkPlotnick: /etc/systemd/coredump.conf ничего не настраивает.   -  person Nan Xiao    schedule 11.04.2017
comment
Обычно закомментированная строка в стандартных конфигурационных файлах указывает значение по умолчанию. Попробуйте раскомментировать и увеличить значение.   -  person n. 1.8e9-where's-my-share m.    schedule 11.04.2017


Ответы (2)


@н.м. правильно.
(1) Измените /etc/systemd/coredump.conf файл:

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

(2) Перезагрузите конфигурацию systemd:

# systemctl daemon-reload

Обратите внимание, что это повлияет только на новые сгенерированные файлы дампа ядра.

person Nan Xiao    schedule 12.04.2017

Является ли 2G предельным размером файла coredump в Linux?

Нет. Я обычно имею дело с дампами ядра размером более 4 ГБ.

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

Это говорит вам о вашем текущем лимите в этой оболочке. Он ничего не говорит вам о среде, в которой работал runTests. Этот процесс может устанавливать свой собственный лимит через setrlimit(2), или его родитель может устанавливать лимит для него.

Вы можете изменить runTest, чтобы вывести его текущий предел с помощью getrlimit(2) и посмотреть, что он собой представляет на самом деле, когда процесс запускается.

P.S. Тот факт, что core усечен, не означает, что он совершенно бесполезен (хотя часто так и бывает). Как минимум, вы должны попробовать команду GDB where.

person Employed Russian    schedule 11.04.2017