Quanto espaço de troca o Solaris 11.3 precisa para executar um compilador?

1

Eu tenho um desktop com uma terceira geração do Core i5 e 4 GB de RAM. Eu estou usando a máquina para testar a construção de alguns projetos de software livre para os quais eu contribuo. A máquina não serve para nenhum outro propósito.

Eu aloquei 4 GB de espaço de troca . Parece que ainda estou ficando sem memória.

$ make -j 4
...

/opt/developerstudio12.6/bin/CC -DHAVE_CONFIG_H -I.    -O2 -template=no%extdef -DCRYPTOPP_DISABLE_SHANI  -D__SSE2__=1 -D__SSSE3__=1 -D__SSE4_1__=1 -D__SSE4_2__=1 -D__AES__=1 -DCRYPTOPP_DATA_DIR='"/usr/local/share/cryptopp/"' -g -c -o cryptest-validat3.o 'test -f 'validat3.cpp' || echo './''validat3.cpp
DBG_GEN FATAL ERROR: dbg_tables.c:171 - fwrite() failed to write required bytes [DBG_GEN 5.7.6]

CC: ube failed for validat3.cpp

O erro também se move:

$ make -j 4
...

/opt/developerstudio12.6/bin/CC -DHAVE_CONFIG_H -I.    -O2 -template=no%extdef -DCRYPTOPP_DISABLE_SHANI  -D__SSE2__=1 -D__SSSE3__=1 -D__SSE4_1__=1 -D__SSE4_2__=1 -D__AES__=1 -DCRYPTOPP_DATA_DIR='"/usr/local/share/cryptopp/"' -g -c -o cryptest-validat0.o 'test -f 'validat0.cpp' || echo './''validat0.cpp
source='validat1.cpp' object='cryptest-validat1.o' libtool=no \
DEPDIR=.deps depmode=none /bin/sh ./depcomp \
/opt/developerstudio12.6/bin/CC -DHAVE_CONFIG_H -I.    -O2 -template=no%extdef -DCRYPTOPP_DISABLE_SHANI  -D__SSE2__=1 -D__SSSE3__=1 -D__SSE4_1__=1 -D__SSE4_2__=1 -D__AES__=1 -DCRYPTOPP_DATA_DIR='"/usr/local/share/cryptopp/"' -g -c -o cryptest-validat1.o 'test -f 'validat1.cpp' || echo './''validat1.cpp
...

libsunir aborting on error
Assertion failed: IR_FALSE, file ../src/IrLib.c, line 204, function ir_err_report
...

CC: Fatal error in /opt/developerstudio12.6/lib/compilers/bin/ube
CC: Status 134
make[1]: *** [Makefile:1477: cryptest-validat1.o] Error 134

Não estou executando nenhum outro programa. Apenas o compilador através do makefile.

Quando examino dmesg , vejo WARNING: /tmp: File system full, swap space limit exceeded . De acordo com o documento do Oracle AVISO: / tmp: sistema de arquivos cheio, swap de espaço limite excedido :

Cause

The system swap area (virtual memory) has filled up. You need to reduce swap space consumption by killing some processes or possibly by rebooting the system.

Action

For information about increasing swap space, refer to "Not enough space".

Estou confuso 4 GB ou RAM e 4 GB de swap não é suficiente para executar um compilador. Não sei quanto mais memória preciso alocar para executar o compilador.

Quanta memória virtual devo alocar para que o compilador possa ser executado sem travar?

$ zfs list
NAME                              USED  AVAIL  REFER  MOUNTPOINT
rpool                            21.3G   207G  4.85M  /rpool
rpool/ROOT                       13.6G   207G    31K  legacy
rpool/ROOT/solaris               13.6G   207G  12.9G  /
rpool/ROOT/solaris/var            526M   207G   367M  /var
rpool/VARSHARE                    164K   207G  69.5K  /var/share
rpool/VARSHARE/pkg                 63K   207G    32K  /var/share/pkg
rpool/VARSHARE/pkg/repositories    31K   207G    31K  /var/share/pkg/repositories
rpool/VARSHARE/zones               31K   207G    31K  /system/zones
rpool/dump                       1.96G   207G  1.90G  -
rpool/export                     1.62G   207G  33.5K  /export
rpool/export/home                1.62G   207G    33K  /export/home
rpool/export/home/apolyakov        38K   207G    38K  /export/home/apolyakov
rpool/export/home/jwalton        1.62G   207G  1.62G  /export/home/jwalton
rpool/swap                       4.13G   207G  4.00G  -

E informa que é saudável mesmo nos lançamentos das falhas de memória ou armazenamento:

$ zpool status -x
all pools are healthy

E alguma contabilidade:

$ zpool status -v
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME      STATE     READ WRITE CKSUM
        rpool     ONLINE       0     0     0
          c1t0d0  ONLINE       0     0     0

errors: No known data errors

O nome desta máquina é solaris3 . É a terceira máquina a experimentar esses problemas. O primeiro foi um servidor DL380 G5 usado usado na HCL da Sun. O segundo foi um Intel Utlra-24 da Sun. O terceiro é o Core i5 low-end.

Eu não faço nada de especial ao colocar um sistema operacional no hardware. Eu baixei o Solaris x86 ISO da Sun (duas vezes agora). Eu corro o instalador e tomo os padrões. Quando solicitado, seleciono a opção "usar disco inteiro" .

Após a instalação do SO, habilito o editor do Solaris Studio. Eu então instale o Autoconf, o Automake, o Libtool, o Git, o Subversion, o GDB, o Sun Studio 12.2 até o 12.6 e algumas outras ferramentas de desenvolvimento. Existem centenas de gigabytes de espaço livre disponíveis nas três máquinas após a instalação do software extra.

Todas as máquinas estão sem cabeça. Eu removo o monitor assim que o sistema operacional é instalado. Embora as máquinas estejam no meu porão, eu trabalho remotamente em SSH.

Eu não sou um administrador do Solaris e não altero arbitrariamente as configurações. Eu altero as configurações em resposta a problemas como este. Depois de alterar uma configuração como tamanho de swap, reinicio a máquina com reboot -p .

    
por jww 25.07.2018 / 04:32

3 respostas

2

Os requisitos do sistema para o Developer Studio 12.6 para 10 Solaris especificam um mínimo de 8GB de swap . Para o solaris 11.3, o mesmo documento diz para ver a documentação do sistema operacional. A documentação do sistema operacional diz "Consulte seus fornecedores de aplicativos para requisitos de espaço de troca para seus aplicativos."

É pouco circular, dado que o fornecedor de software (Oracle) diz para verificar a documentação do sistema operacional (também Oracle), que diz verificar os documentos do fornecedor de software. Ad infinitum.

No final, eu aumentaria minha troca para 8 GB de acordo com os requisitos do Solaris 10, já que não há nada mais definitivo do Solaris 11 do que "o que seu fornecedor disse?".

    
por 25.07.2018 / 18:21
2

No Solaris, o sistema de arquivos / tmp é fornecido pelo tmpfs. O tmpfs mantém o sistema de arquivos na memória virtual. Considere-o muito remotamente semelhante a um ramdisk. Tudo o que você escreve em / tmp aloca memória do subsistema VM e como o Solaris é um alocador ansioso, a troca é reservada para isso mesmo quando o material está na memória, pois você pode trocar esse material caso a memória seja escassa (muito simplificada) .

AFAIR um dos motivos era permitir que os compiladores fizessem compilações rápidas enviando arquivos temporários na memória local, em vez de um disco remoto. Por padrão, o Sun Studio Compiler grava arquivos temporários em / tmp. Você deve tentar configurar o TMPDIR para / var / tmp, que reside no disco, mas com desempenho reduzido. Talvez você esteja escrevendo muito em / tmp. Como alternativa, você pode apenas aumentar o swap.

    
por 29.07.2018 / 10:52
1

Seu problema pode estar em outro lugar.

A pesquisa na parte "DBG_GEN FATAL ERROR" de sua mensagem de erro on-line revela que isso parece altamente específico para sua tarefa. Talvez examine o código em questão e veja onde ele está tentando gravar? Pode ser um sistema de arquivos temporário ou outro dispositivo com capacidade limitada.

Por exemplo, ficar sem espaço no / tmp (que é frequentemente montado como um tmpfs no Linux) é um culpado comum por erros de "falta de espaço" em certos tipos de tarefas.

    
por 25.07.2018 / 06:06