tmp
может быть сокращением от временный (, как и переходный ), поскольку эти файлы, как и файлы журналов, периодически сменяются/усекаются. Файлы utmp
и wtmp
также изначально находились в /tmp
, когда они были представлены в Версии 3 AT&T Unix .
Однако в настоящее время tmp
может быть прочитано как сокращение от timestamp . tm
также является общепринятой аббревиатурой времени(см., например, руководство для ctime()
функции C и заголовок time.h
), и эти файлы содержат метки времени для системных событий. относительно входа пользователей в систему.
u
в utmp
, вероятно, исходит от пользователя . b
вbtmp
(в системах, в которых она есть ), скорее всего, возникает из-за неверных(неверных входов в систему ). w
вwtmp
может исходить от who(как в "кто был в системе?" ), но не из who
илиw
(утилит ), поскольку они используют utmp
, а не wtmp
. Это оказалось ошибкой gmake 3.81. Когда я запускал команду компиляции напрямую без make, она могла использовать гораздо больше памяти. Кажется, в 3.80 была известная ошибка:Что-то вроде этого . Этот баг должен был быть исправлен в 3.81. но я получил очень похожую ошибку.
Итак, я попробовал gmake 3.82. Компиляция продолжилась, и я больше не видел ошибки виртуальной машины.
Мне так и не удалось заставить его сделать дамп ядра, поэтому я на самом деле не знаю, на что не хватило виртуальной памяти, на gmake, g++ или as. Это просто не сбрасывало бы ядро при этой ошибке. Я также не знаю, в чем на самом деле была ошибка, но, похоже, теперь она работает.
У меня есть кое-что, что вы можете попробовать:
-ftemplate-depth
и-fconstexpr-depth
). В лучшем случае, однако, я ожидаю, что это только поможет вам увидеть, какие выражения (s )вызывают нехватку памяти. В этой статье подробно описывается, как увеличить пространство подкачки в Solaris , однако придет день, когда эта ссылка будет разорвана, так что вот краткий обзор этой статьи:
# Identify the current swap volume.
$ swap -l
swapfile dev swaplo blocks free
/dev/zvol/dsk/rpool/swap 256,1 16 1058800 1058800
# Do one of the following:
# a) Modify the existing swap volume (REQUIRES REBOOT)
$ zfs get volsize rpool/swap
NAME PROPERTY VALUE SOURCE
rpool/swap volsize 517M -
$ zfs set volsize=2g rpool/swap
$ zfs get volsize rpool/swap
NAME PROPERTY VALUE SOURCE
rpool/swap volsize 2G -
$ init 6
# b) Add an additional swap volume
# Create it
$ zfs create -V 2G rpool/swap2
# Activate it
$ swap -a /dev/zvol/dsk/rpool/swap2
$ swap -l
swapfile dev swaplo blocks free
/dev/zvol/dsk/rpool/swap 256,1 16 1058800 1058800
/dev/zvol/dsk/rpool/swap2 256,3 16 4194288 4194288
# Add an entry for the new volume in /etc/vfstab
$ /opt/csw/gnu/grep -P '\sswap' /etc/vfstab
/dev/zvol/dsk/rpool/swap - - swap - no -
/dev/zvol/dsk/rpool/swap2 - - swap - no -
Если вы хотите попробовать диагностировать проблему, попробуйте сделать следующее:
# This tells Solaris to add all available sections into coredumps &
# place coredumps in your home directory with the given pattern
$ coreadm -p ~/%t.%n.%u.%f.%p.core -P all
$ gcc ${flags} source.cc -fsyntax-only
$ gcc ${flags} source.cc -c -o source.o
Что искать/попробовать:
-fsyntax-only
? top
машина Solaris, на которую я смотрю, показывает 511 ГБ физической памяти, 153 ГБ свободной, 20 ГБ общей подкачки, 20 ГБ свободной подкачки. swap -l
и сравните Кроме того, взгляните на некоторые флаги GCC,например:
-Q
Печатать имена функций по мере их компиляции и статистику о каждом проходе -ftime-report
Информация о времени для каждого прохода -fdump-rtl*
флаги