java – Cassandra跟踪和客户端延迟之间的差异
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Cassandra跟踪和客户端延迟之间的差异,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2636字,纯文字阅读大概需要4分钟。
内容图文
我们正在使用Cassandra 2.0.15,并且从所有应用主机中定期(大约每3分钟)出现大量读取延迟(> 60秒).我们测量对session.execute(stmt)的调用的延迟.与此同时,Cassandra追踪的报告持续时间<1s.我们还在一个循环中,在这些峰值延迟时间内通过cqlsh从同一主机运行查询,并且cqlsh总是在1s内返回.什么可以解释Java驱动程序级别的这种差异?
– 编辑:回复评论 –
Cassandra服务器JVM设置:-XX:CMSClassUnloadingEnabled -XX:UseThreadPriorities -XX:ThreadPriorityPolicy = 42 -XX:HeapDumpOnOutOfMemoryError -Xss256k -XX:StringTableSize = 1000003 -Xms32G -Xmx32G -XX:UseG1GC -Djava.net.preferIPv4Stack = true -Dcassandra. jmx.local.port = 7199 -XX:DisableExplicitGC.
客户端GC可忽略不计(下图).客户端设置:-Xss256k -Xms4G -Xmx4G,Cassandra驱动版本为2.1.7.1
客户端测量代码:
val selectServiceNames = session.prepare(QueryBuilder.select("service_name").from("service_names"))
override def run(): Unit = {
val start = System.currentTimeMillis()
try {
val resultSet = session.execute(selectServiceNames.bind())
val serviceNames = resultSet.all()
val elapsed = System.currentTimeMillis() - start
latency.add(elapsed) // emits metric to statsd
if (elapsed > 10000) {
log.info("Canary2 sensed high Cassandra latency: " + elapsed + "ms")
}
} catch {
case e: Throwable =>
log.error(e, "Canary2 select failed")
} finally {
Thread.sleep(100)
schedule()
}
}
群集构造代码:
def createClusterBuilder(): Cluster.Builder = {
val builder = Cluster.builder()
val contactPoints = parseContactPoints()
val defaultPort = findConnectPort(contactPoints)
builder.addContactPointsWithPorts(contactPoints)
builder.withPort(defaultPort) // This ends up config.protocolOptions.port
if (cassandraUsername.isDefined && cassandraPassword.isDefined)
builder.withCredentials(cassandraUsername(), cassandraPassword())
builder.withRetryPolicy(ZipkinRetryPolicy.INSTANCE)
builder.withLoadBalancingPolicy(new TokenAwarePolicy(new LatencyAwarePolicy.Builder(new RoundRobinPolicy()).build()))
}
还有一个观察我无法解释.我在循环中运行了两个以相同方式(如上所述)执行相同查询的线程,唯一的区别是黄色线程在查询之间休眠100毫秒,绿色线程在查询之间休眠60秒.绿色线程比黄色线程更频繁地击中低延迟(低于1秒).
解决方法:
当你得到一个自己测试的组件时,这是一个常见的问题.
>您可能会遇到相关工具无法看到的延迟.
>您的组件不知道请求何时开始.
>当JVM停止时,这可以防止您看到您尝试测量的延迟.
最可能的解释是第二个.假设您有100个任务的队列,但由于系统运行缓慢,每个任务需要1秒钟.你在内部对每个任务计时,它看到它需要1秒,但是在队列中添加100个任务,第一个在0秒后开始,但是最后一个在99秒后开始,然后报告花了1秒,但从你的角度来看它花了100秒才完成,99秒等待开始.
到达您的结果也可能有延迟,但除非您在处理结果时执行的操作超过数据库所需的操作,否则这种情况不太可能发生.即你可能认为瓶颈在服务器上.
内容总结
以上是互联网集市为您收集整理的java – Cassandra跟踪和客户端延迟之间的差异全部内容,希望文章能够帮你解决java – Cassandra跟踪和客户端延迟之间的差异所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。