2017-11-02 16 views
1

GraphDB에서 "큰"SAPRQL INSERT WHERE을 실행 중이며 사용할 수있는 실제 RAM을 모두 사용하지 않는 것 같습니다. 내가 64 기가 바이트, 4 코어에 CentOS 6.9 서버GraphDB에서 사용 가능한 메모리를 모두 사용하지 않습니다.

-bash-4.1$ free -m 
      total  used  free  shared buffers  cached 
Mem:   64428  21897  42530   0  107  2877 
-/+ buffers/cache:  18912  45515 
Swap:   8095   0  8095 

을 사용하고

나는이 같은 GraphDB 8.3.0 시작 :

graphdb -Xms50g -Xmx50g -d 

그것은 그 경우, 비 추론 REPO의 어떤 차이가 여기에

가 sysinfo가 페이지의 말씀입니다 수

응용 프로그램 정보 :

OS: Linux 2.6.32-696.6.3.el6.x86_64 
Java: Oracle Corporation 1.8.0_144 
Memory used: 5554 MB 
Max memory: 50977 MB 

JVM 인수

-Xms1g 
-Djava.awt.headless=true 
-Dfile.encoding=UTF-8 
-Djava.net.preferIPv4Stack=true 
-XX:+UseParallelGC 
-XX:-OmitStackTraceInFastThrow 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/usr/local/graphdb/heapdump.hprof 
-XX:OnOutOfMemoryError=kill -9 %p 
-Dgraphdb.dist=/usr/local/graphdb 
-Xms50g 
-Xmx50g 

최고 출력 : 여기

top - 13:32:23 up 22:37, 1 user, load average: 1.00, 0.96, 0.76 
Tasks: 153 total, 1 running, 152 sleeping, 0 stopped, 0 zombie 
Cpu(s): 25.1%us, 0.2%sy, 0.0%ni, 74.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 65974292k total, 22390544k used, 43583748k free, 109900k buffers 
Swap: 8290300k total,  0k used, 8290300k free, 2915740k cached 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
4071 sprqlusr 20 0 56.2g 17g 22m S 101.0 28.4 16:53.29 /usr/local/java/bin/java -Xms1g -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true -XX:+UseParallelGC -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpO 

그리고 메모리 utilzation 페이지

의 스크린 샷입니다

+1

JVM이 필요에 따라 사용 가능한 메모리를 할당하는 대신 50g 힙 크기를 사용하게하는 이유가 있습니까? 나는 네가하는 일이 잘못되었다는 말은 아니며 단지 묻는다. 'graphdb -d'를 실행하면 메모리 프로파일은 어떻게됩니까? – Nathan

+1

@Nathan ... 좋은 질문입니다. 다음에 나는 db를 오프라인으로 가져 간다. 나는 그것을 시도 할 것이다. 나는 GraphDB가 할당 된 RAM을 모두 사용할 수 있는지를보기가 끔찍한 시도라고 생각한다. 나는 graphdb 프로세스가 RAM의 30 % 이상을 사용하는 것을 결코 보지 못했고, 그래서 그것은 나를 귀찮게하고 있었고, 나는이 붙어있는 질의가 좋은 경우라고 생각했다. –

답변

2

기본적으로 GraphDB는 모든 디스크 페이지 캐싱과 I/O 시간 최소화를 담당하는 글로벌 페이지 캐시에 사용 가능한 힙의 50 %를 할당합니다. 값은 conf/graphdb.properties에서 graphdb.page.cache.size로 시작하는 라인으로 제어됩니다. 시나리오에서 전역 캐시는 기본적으로 25GB로 설정됩니다.

일반적으로 10 억 개의 RDF 문이있는 저장소는 모든 인덱스가 켜져 있으면 약 100GB의 디스크 공간을 차지한다고 계산할 수 있습니다. 힙 메모리 사용 다이어그램에서 데이터 세트가 캐시 크기를 채우기에 충분하지 않은 것처럼 보입니다.

빠른 SSD 디스크를 사용하는 설정의 경우 전체 저장소 크기의 15-30 %보다 큰 캐시 크기를 할당하는 데 약간의 차이가 있습니다. 힙 크기를 더 크게 설정하면 GC주기가 길어져 repo의 성능이 저하 될 수 있습니다. -XX:+UseCompressedOops의 이점을 얻기 위해 최대 힙 크기를 32GB 미만으로 제한하는 것이 좋습니다. 포인터 압축을 사용하지 않는 경우 50GB 힙 크기와 거의 동일해야합니다. 이 동작은 big heaps sizes을 관리하는 다른 Java 응용 프로그램과 일치합니다.

+0

감사합니다. 그냥 주위에 귀하의 제안을 통해 일하는. ** 내 시스템 **에서 graphdb.properties 파일을 볼 수 없습니다 ** : Windows 10, GraphDB 8.4.1 (전체 디스크 검색) 또는 CentOS 6.9, GraphDB 8.3.0, 독립 실행 형 서버 'refine','repoPenaltyBox','repositories'를 포함하는 "data"폴더와'bin','conf'를 포함하는'/ usr/local/graphdb-free-8.3.0 /'을 검색했습니다. , etc.) –

+1

dist 패키지 (*.zip) 파일은'/ conf'에 있습니다.'deb','rpm' 등에서 이것이 어떻게 작동하는지 모르겠습니다. – AKSW

+1

@MarkMiller 다양한 플랫폼에서 기본 응용 프로그램으로 설치되었을 때 GraphDB의/conf 경로를 찾는 가장 빠른 방법입니다 작업 표시 줄에서 GraphDB 아이콘을 클릭하고 "로그 디렉토리 표시"를 누릅니다. 그런 다음 브라우저 하나의 디렉토리를 올리십시오. –