내 데스크탑에는 3세대 Core i5와 4GB RAM이 있습니다. 나는 이 컴퓨터를 사용하여 내가 기여하는 일부 무료 소프트웨어 프로젝트 빌드를 테스트하고 있습니다. 기계에는 다른 목적이 없습니다.
내가 할당한4GB 스왑 공간. 아직 기억이 부족한 것 같습니다.
$ 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
오류도 이동됩니다.
$ 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
다른 프로그램을 실행하고 있지 않습니다. makefile을 통해서만 컴파일할 수 있습니다.
확인해 dmesg
보니WARNING: /tmp: File system full, swap space limit exceeded
. 오라클 문서에 따르면경고: /tmp: 파일 시스템이 가득 찼습니다. 스왑 공간 제한이 초과되었습니다.:
이유
시스템 스왑 영역(가상 메모리)이 가득 찼습니다. 일부 프로세스를 종료하거나 시스템을 다시 시작하여 스왑 공간 소비를 줄여야 합니다.
행동
스왑 공간 늘리기에 대한 자세한 내용은 다음을 참조하세요.“좌석이 부족해요”.
4GB 또는 RAM과 4GB 스왑 공간이 컴파일러를 실행하기에 충분하지 않다는 사실이 혼란 스럽습니다. 컴파일러를 실행하려면 얼마나 많은 메모리를 할당해야 하는지 모르겠습니다.
충돌 없이 컴파일러를 실행하려면 가상 메모리를 얼마나 할당해야 합니까?
$ 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 -
메모리 또는 스토리지 오류가 발생하더라도 상태를 보고합니다.
$ zpool status -x
all pools are healthy
그리고 일부 회계:
$ 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
이 기계의 이름은 입니다 solaris3
. 이러한 문제를 경험한 세 번째 기계입니다. 첫 번째는 Sun HCL에서 사용되는 DL380 G5 서버입니다. 두 번째는 Sun의 Intel Utlra-24입니다. 세 번째는 저가형 Core i5입니다.
하드웨어에 운영체제를 배치할 때 특별히 한 일은 없습니다. 저는 Sun에서 Solaris x86 ISO를 다운로드했습니다(지금은 두 번). 설치 프로그램을 실행하고 기본값을 사용했습니다. 메시지가 표시되면 선택했습니다."디스크 전체를 사용하세요"옵션.
운영 체제를 설치한 후 Solaris Studio 게시자를 활성화했습니다. 그런 다음 Autoconf, Automake, Libtool, Git, Subversion, GDB, Sun Studio 12.2~12.6 및 기타 몇 가지 개발 도구를 설치했습니다. 추가 소프트웨어를 설치하면 세 컴퓨터 모두에 수백 기가바이트의 여유 공간이 생깁니다.
모든 기계에는 헤드가 없습니다. OS를 설치한 후 모니터를 제거했습니다. 기계는 지하실에 있지만 SSH를 통해 원격으로 작업합니다.
저는 Solaris 관리자가 아니며 마음대로 설정을 변경하지 않습니다. 이런 유형의 문제를 처리하기 위해 설정을 변경했습니다. 스왑 크기 등의 설정을 변경한 후 reboot -p
.
답변1
Developer Studio 12.6의 시스템 요구사항솔라리스 10지정하다최소 8GB 스왑 공간. Solaris 11.3의 경우 동일한 문서에서 운영 체제 문서를 확인하라고 나와 있습니다. 운영 체제 설명서에 따르면"애플리케이션의 스왑 공간 요구 사항은 해당 애플리케이션 공급업체에 문의하세요."
소프트웨어 공급업체(Oracle)에서는 운영 체제 설명서(또는 Oracle)를 확인하라고 하고, 운영 체제 설명서에서는 소프트웨어 공급업체 설명서를 확인하라고 하기 때문에 약간 순환적입니다. 끝이 없습니다.
마지막으로, Solaris 10에서 요구하는 대로 스왑 공간을 8GB로 늘리겠습니다. 왜냐하면 Solaris 11에서는 "공급업체가 뭐라고 말합니까?"보다 더 명확한 것은 없기 때문입니다.
답변2
Solaris에서 파일 시스템 /tmp는 tmpfs에 의해 제공됩니다. tmpfs는 가상 메모리에 파일 시스템을 보유합니다. 램디스크와 매우 유사하다고 생각하시면 됩니다. /tmp에 작성하는 모든 내용은 VM 하위 시스템에서 메모리를 할당하며 Solaris는 열성 할당자이므로 메모리가 희박할 때 사용할 수 있기를 원하기 때문에 콘텐츠가 메모리에 있더라도 이를 위해 스왑이 예약됩니다. 아래에 있습니다(매우 쉽습니다).
AFAIR를 사용하는 이유 중 하나는 원격 디스크 대신 로컬 메모리에 임시 파일을 전송하여 컴파일러가 빠르게 컴파일할 수 있도록 하는 것입니다. 기본적으로 Sun Studio 컴파일러는 임시 파일을 /tmp에 씁니다. TMPDIR을 디스크에 있는 /var/tmp로 설정해야 하지만 성능이 저하됩니다. 어쩌면 당신은 /tmp에 많은 내용을 쓸 수도 있습니다. 대안으로 스왑을 추가할 수도 있습니다.
답변3
문제는 다른 곳에 있을 수 있습니다.
오류 메시지의 "DBG_GEN FATAL ERROR" 부분을 온라인으로 검색하면 이것이 귀하의 작업에 적합한 것으로 보입니다. 문제의 코드를 확인하고 어디에 쓰려고 하는지 알아볼까요? 임시 파일 시스템이거나 용량이 제한된 기타 장치일 수 있습니다.
예를 들어, /tmp(일반적으로 Linux에서는 tmpfs로 마운트됨)의 공간 부족은 특정 유형의 작업에서 "공간 부족" 오류가 발생하는 일반적인 원인입니다.