Я тестирую библиотеку C++ под Solaris 11 с Sun Studio 12.5. Библиотека без проблем работает под Sun Studio с 12.2 по 12.4, но имеет проблемы под 12.5.

В версии 12.5 болевая точка появляется при компиляции неоптимизированной и отладочной сборки файла bench.cpp . Инструменты жалуются, что им не хватает места. Результат неудачной компиляции ниже.

Я видел этот симптом раньше, но обычно это устройство ARM с небольшим объемом памяти и без файла подкачки.

Машина имеет два Xeon's, 8 ГБ оперативной памяти и два 136 ГБ дисков в конфигурации RAID 1. Используемое дисковое пространство составляет около 20 ГБ. Боюсь, что при установке системы у меня возникли ошибки, но я не могу определить, что это такое. Информация о конфигурации ниже.

Мои вопросы очень просты: достаточно ли у меня памяти и места для компиляции файла, который облагает налогом инструменты? Что-то неправильно настроено?


$ prtconf | grep -i memory
Memory size: 8190 Megabytes

$ zpool list
NAME   SIZE  ALLOC  FREE  CAP  DEDUP  HEALTH  ALTROOT
rpool  136G  19.6G  116G  14%  1.00x  ONLINE  -

$ df -h
Filesystem             Size   Used  Available Capacity  Mounted on
rpool/ROOT/solaris     134G    11G       113G    10%    /
/devices                 0K     0K         0K     0%    /devices
/dev                     0K     0K         0K     0%    /dev
ctfs                     0K     0K         0K     0%    /system/contract
proc                     0K     0K         0K     0%    /proc
mnttab                   0K     0K         0K     0%    /etc/mnttab
swap                   6.7G   1.6M       6.7G     1%    /system/volatile
objfs                    0K     0K         0K     0%    /system/object
sharefs                  0K     0K         0K     0%    /etc/dfs/sharetab
/usr/lib/libc/libc_hwcap1.so.1
                       124G    11G       113G    10%    /lib/libc.so.1
fd                       0K     0K         0K     0%    /dev/fd
rpool/ROOT/solaris/var
                       134G   346M       113G     1%    /var
swap                   6.8G   114M       6.7G     2%    /tmp
rpool/VARSHARE         134G   164K       113G     1%    /var/share
rpool/export           134G    32K       113G     1%    /export
rpool/export/home      134G    36K       113G     1%    /export/home
rpool/export/home/apolyakov
                       134G    38K       113G     1%    /export/home/apolyakov
rpool/export/home/jwalton
                       134G   2.6G       113G     3%    /export/home/jwalton
rpool/export/home/mcaswell
                       134G    38K       113G     1%    /export/home/mcaswell
rpool/export/home/pgutmann
                       134G    38K       113G     1%    /export/home/pgutmann
rpool                  134G   4.9M       113G     1%    /rpool
rpool/VARSHARE/zones   134G    31K       113G     1%    /system/zones
rpool/VARSHARE/pkg     134G    32K       113G     1%    /var/share/pkg
rpool/VARSHARE/pkg/repositories
                       134G    31K       113G     1%    /var/share/pkg/repositories

А также:

# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c1t0d0 <HP-LOGICAL VOLUME-5.26-136.70GB>
          /pci@0,0/pci8086,25e3@3/pci103c,3235@0/sd@0,0
Specify disk (enter its number): 0
selecting c1t0d0
[disk formatted]
/dev/dsk/c1t0d0s1 is part of active ZFS pool rpool. Please see zpool(1M).

FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        ...

format> partition

PARTITION MENU:
        0      - change `0' partition
        1      - change `1' partition
        2      - change `2' partition
        3      - change `3' partition
        4      - change `4' partition
        5      - change `5' partition
        6      - change `6' partition
        select - select a predefined table
        modify - modify a predefined partition table
        name   - name the current table
        print  - display the current table
        ...
partition> print
Current partition table (original):
Total disk sectors available: 286660669 + 16384 (reserved sectors)

Part      Tag    Flag     First Sector         Size         Last Sector
  0  BIOS_boot    wm               256      256.00MB          524543    
  1        usr    wm            524544      136.44GB          286660702    
  2 unassigned    wm                 0           0               0    
  3 unassigned    wm                 0           0               0    
  4 unassigned    wm                 0           0               0    
  5 unassigned    wm                 0           0               0    
  6 unassigned    wm                 0           0               0    
  8   reserved    wm         286660703        8.00MB          286677086   

$ cat bench-compile.txt
...
/opt/developerstudio12.5/bin/CC -DDEBUG -g3 -xO0 -native -m64 -KPIC -template=no%extdef -c bench2.cpp

DBG_GEN FATAL ERROR: dbg_tables.c:171 - fwrite() failed to write required bytes [DBG_GEN 5.6.3]

CC: Fatal error in /opt/developerstudio12.5/lib/compilers/bin/previse
CC: Status 134
gmake: *** [test.o] Error 134
gmake: *** Waiting for unfinished jobs....
Assembler: bench2.cpp
    "<null>", line 821548 : Trouble writing; probably out of temporary file space
/opt/developerstudio12.5/lib/compilers/sys/amd64/libsunir.so'ir_proc_write+0x5d [0xffff80ffbb0eeffd]
/opt/developerstudio12.5/lib/compilers/sys/amd64/libsunir.so'ir_mod_write_and_close+0x2f [0xffff80ffbb10633f]
/opt/developerstudio12.5/lib/compilers/bin/iropt'0x3fee3f [0x7fee3f]
/opt/developerstudio12.5/lib/compilers/bin/iropt'main+0x567 [0x8058f7]
/opt/developerstudio12.5/lib/compilers/bin/iropt'0x12d324 [0x52d324]
compiler(iropt) error:  libsunir File IO (read / write IR) error using /tmp/iropt.1468062981.23519.05.ir (No space left on device).
CC: cannot copy temporaries: /tmp/previse.1468062981.23519.07.err
CC: Fatal error in /opt/developerstudio12.5/lib/compilers/bin/previse
CC: Status 134
gmake: *** [bench2.o] Error 134
ERROR: failed to make cryptest.exe

$ 

2 ответа2

2

Согласно сообщению об ошибке вашей системе не хватает виртуальной памяти. Это может произойти даже при наличии достаточного дискового пространства и достаточного объема оперативной памяти.

Я хотел бы начать с создания второго zvol, скажем, 8 ГБ, и добавить его в качестве устройства подкачки. например:

zfs create -V 8gb rpool/swap1
swap -a /dev/zvol/dsk/rpool/swap1
echo "/dev/zvol/dsk/rpool/swap1 - - swap - no -" >> /etc/vfstab

Мониторинг использования виртуальной памяти можно выполнить с помощью команды swap -s .

1

Есть две похожие проблемы, которые могут возникнуть при сборке программ в Solaris с помощью компиляторов Studio.

1) / TMP пространство заканчивается

Приведенный выше симптом показывает, что это произошло для вас. Поскольку каталог /tmp выделяется из виртуальной памяти (файловая система на основе памяти), ответ заключается в добавлении пространства подкачки, как показано выше.

2) malloc возвращает код ошибки

Если система не может найти пространство кучи (malloc) в работающем процессе, одним из распространенных режимов ошибки будет сообщение о "сбое ветвления", которое происходит, когда ОС не может выделить достаточно виртуальной памяти для создания нового образа процесса. Это сообщение будет исходить от ОС, а не от компилятора.

Ядро Solaris иногда возвращает ошибку malloc() пользовательской программе, даже если системе выделено достаточно места подкачки. Это происходит, когда истекает время запроса памяти. Если ядро не может найти доступное пространство (например, путем выгрузки памяти на диск) в течение разумного времени, оно вернет ошибку.

Это будет сбивать с толку, потому что похоже, что больше нет свопа, но это просто проблема времени.

В итоге:

Запуск виртуальной машины через каталог /tmp имеет другие симптомы и поведение, отличное от запуска виртуальной машины с помощью вызова malloc(). Так что имейте это в виду.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .