2014-02-16 4 views
2

Cassandra가 기본 구성으로 설치됩니다. 단일 노드 서버, 48GB 램, 2TB hdd. 약 80 백만 줄이 상당히 느려졌을 때 삽입되었습니다. 새 연결은 시간 초과 오류로 거부됩니다.8 천만 개의 행이 삽입 된 Cassandra가 삽입되었습니다.

Opsenter는 시간 초과를 발생시킵니다.

htop는 \ 글을 읽고 100 %

iotop에 대한 CPU로드 1 개 카산드라 프로세스가 주기적으로 보여줍니다 만 집중적 정말 낮은 - 그래서 HDD의 RAM이 여전히 많은 자유와 아무것도 병목

아니다

nodetool의 tpstats 교체되었습니다 - didnt 한 작품으로 분쇄 :

nodetool 상태 "로 java.net.SocketTimeoutException을 읽기 시간이 초과되었습니다"- 서버가 정상적으로 작동하는지 보여줍니다 (!)는 : UN은 부하가 122기가바이트이며, 소유 100 %, 토큰 256

꼬리 /var/log/cassandra/system.log - 나를 위해 정보를 아무것도, 마지막 줄에 무슨 일

INFO [ScheduledTasks:1] 2014-02-16 04:36:21,824 StatusLogger.java (line 121) system.local 

입니까? 현재 실행 된 작업 목록을 찾는 방법은 무엇입니까? 그 행동의 이유를 찾는 방법? 어떻게 정상으로 되돌릴 수 있을까요?

감사합니다.

P. 마지막으로 예외가 throw되었습니다.

ERROR [ReadStage : 1550] 2014-02-16 05 : 22 : 26,476 CassandraDaemon.java (행 192) 스레드의 예외 Thread [ReadStage : 1550,5, main] java.lang .OutOfMemoryError : org.apache.cassandra.io.util.RandomAccessReader에서 자바 힙 공간 (RandomAccessReader.java:69) org.apache.cassandra.io.compress.CompressedRandomAccessReader에서 (CompressedRandomAccessReader.java:76) 에서.. org.apache.cassandra.io.compress.CompressedRandomAccessReader.open (CompressedRandomAccessReader.java:43) at org.apache.cassandra.io.util.CompressedPoolingSegmentedFile.createReader (CompressedPoolingSegmentedFile.java:48) at org.apache.cassandra. io.util.PoolingSegmentedFile.getSegment (PoolingSegmentedFile.java:39) at org.apache.cassandra.io.sstable.SSTableReader.getFileDataInput (SSTableReader.java:1195) at org.apache.cassandra.db.columniterator.IndexedSliceReader.setToRowStart (IndexedSliceReader.java:108) org.apache.cassandra.db.columniterator.IndexedSliceReader에서 . (IndexedSliceReader.java:84) org.apache.cassandra.db.columniterator.SSTableSliceIterator.createReader (SSTableSliceIterator.java:65)에서 org.apache.cassandra에서 (SSTableSliceIterator.java:42) 에서 org.apache.cassandra.db.filter.SliceQueryFilter.getSSTableColumnIterator (SliceQueryFilter.java:167) at org.apache.cassandra.db.filter.QueryFilter. getSSTableColumnIterator (QueryFilter.java:62) at org.apache.cass andra.db.CollationController.collectAllData (CollationController.java:273) at org.apache.cassandra.db.CollationController.getTopLevelColumns (CollationController.java:53) at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns (ColumnFamilyStore. java : 1560) at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily (ColumnFamilyStore.java:1379) at org.apache.cassandra.db.Keyspace.getRow (Keyspace.java:327) at org.apache. cassandra.db.SliceFromReadCommand.getRow (SliceFromReadCommand.java : 65) at org.apache.cassandra.service.StorageProxy $ LocalReadRunnable.runMayThrow (StorageProxy.java:1396) at org.apache.cassandra.service.StorageProxy $ DroppableRunnable.run (StorageProxy.java:1931) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) 의 java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) 의 java.lang.Thread.run (Thread.java : 744)

+0

어떤 버전의 C *를 사용하고 있으며 노드의 힙 크기는 얼마입니까? –

+0

@LyubenTodorov Cassandra 2.0.5, 힙 크기는 8GB입니다. – Spaceman

+0

더 많은 system.log를 사용할 수 있고 아직 프로덕션 환경에 있지 않은 경우 추가 세부 사항을 위해 디버그 수준을 높일 수 있습니다. – Jacob

답변

0

카산드라의 관점에서 실제로 8 천만 행입니까? CQL3을 사용 중이고 기본 키의 첫 번째 열이 모든 행에 대해 동일하면이 열은 모두이 파티션 키와 같은 가비지 아래에서 동일한 행에 있습니다. 이것은 카산드라를 무례하게 만들 수 있습니다.

행 크기 열의 cfhistograms를 확인하고 대량 행이 있는지 확인하십시오.

+0

예, 80 mlns 행이 있습니다. 알고리즘으로 인해 많은 열을 가질 수 없습니다 (행 키에 1,2,3 ...를 추가하는 카운터가 있음). 그리고 전 opscenter에서 데이터를 확인했습니다. 예, 행당 2-3 열입니다. – Spaceman

+0

큰 파티션으로 인해 수리가 불행하게 될 수 있지만 손상 정도는 수리의 정도에 달려 있습니다. OOM을 넘어서서는 안됩니다. – jbellis