我将几乎1
放在带有3个节点的Cassandra(2.1.11)集群中,复制因子为Statement stmt = new SimpleStatement("select * from test" );
System.out.println("starting to read records ");
stmt.setFetchSize(10000);
ResultSet rs = session.execute(stmt);
//System.out.println("rs.size " + rs.all().size());
long cntRecords = 0;
for(Row row : rs){
cntRecords++;
if(cntRecords % 10000000 == 0){
System.out.println("the " + cntRecords/10000000 + " X 10 millions of records");
}
}
,然后我编写客户端应用程序以使用datastax's Java Driver
计算所有记录,代码段如下:
cntRecords
在上面的变量Exception in thread "main" com.datastax.driver.core.exceptions.ReadTimeoutException:
Cassandra timeout during read query at consistency ONE (1 responses were required but only
0 replica responded)
超过3000万之后,我总是得到例外:
-XX:InitialHeapSize=17179869184
-XX:MaxHeapSize=17179869184
-XX:MaxNewSize=12884901888
-XX:MaxTenuringThreshold=1
-XX:NewSize=12884901888
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+UseCompressedOops
-XX:+UseConcMarkSweepGC
-XX:+UseCondCardMark
-XX:+UseGCLogFileRotation
-XX:+UseParNewGC
-XX:+UseTLAB
-XX:+UseThreadPriorities
-XX:+CMSClassUnloadingEnabled
我在google中获得了几个结果并更改了有关堆和GC的设置,以下是我的相对设置:
jstat
我使用GCViewer来分析gc日志文件,其中througput为99.95%,98.15%和95.75%。
更新开始:
我使用S1
监控三个节点中的一个,发现当100.00
的值更改为/usr/java/jdk1.7.0_80/bin/jstat -gcutil 8862 1000
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 100.00 28.57 36.29 74.66 55 14.612 2 0.164 14.776
时,我会很快收到上述错误:
S1
一旦100.00
更改为S1
,cassandra.yaml
不再会减少,我不知道这与错误有关吗?或者cassandra-env.sh
或-XX:+CMSEdenChunksRecordAlways
-XX:CMSInitiatingOccupancyFraction=75
-XX:+CMSParallelInitialMarkEnabled
-XX:+CMSParallelRemarkEnabled
-XX:CMSWaitDuration=10000
-XX:CompileCommandFile=bin/../conf/hotspot_compiler
-XX:GCLogFileSize=94371840
-XX:+HeapDumpOnOutOfMemoryError
-XX:NumberOfGCLogFiles=90
-XX:OldPLABSize=16
-XX:PrintFLSStatistics=1
-XX:+PrintGC
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-XX:+PrintPromotionFailure
-XX:+PrintTenuringDistribution
-XX:StringTableSize=1000003
-XX:SurvivorRatio=8
-XX:ThreadPriorityPolicy=42
-XX:ThreadStackSize=256
我应该为此设置什么属性?
如何完成计算所有记录的任务,我该怎么做?提前谢谢!
ATTACH: 以下是其他选择:
{{1}}
答案 0 :(得分:2)
检查为什么您需要知道行数。您的应用程序真的需要知道吗?如果它能够以“只是”一个很好的近似值存活,那么创建一个计数器并在加载数据时递增它。
http://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html
你可以尝试的事情:
*
。这可能会降低GC压力和网络消耗。最好选择一个具有少量字节且属于主键的列:select column1 from test
cassandra.yaml
并增加range_request_timeout_in_ms
和read_request_timeout_in_ms