小编san*_*ity的帖子

使用UseConcMarkSweepGC减少JVM暂停时间> 1秒

我在一台具有16Gb RAM,8核处理器和Java 1.6的机器上运行内存密集型应用程序,所有这些都运行在CentOS 5.2版(最终版)上.精确的JVM详细信息是:

java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode)
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令行选项启动应用程序:

java -XX:+UseConcMarkSweepGC -verbose:gc -server -Xmx10g -Xms10g ...
Run Code Online (Sandbox Code Playgroud)

我的应用程序公开了一个JSON-RPC API,我的目标是在25ms内响应请求.不幸的是,我看到延迟超过1秒,似乎是垃圾收集造成的.以下是一些较长的例子:

[GC 4592788K->4462162K(10468736K), 1.3606660 secs]
[GC 5881547K->5768559K(10468736K), 1.2559860 secs]
[GC 6045823K->5914115K(10468736K), 1.3250050 secs]
Run Code Online (Sandbox Code Playgroud)

这些垃圾收集事件中的每一个都伴随着延迟的API响应,其持续时间与显示的垃圾收集的长度非常相似(在几毫秒内).

以下是一些典型示例(这些示例均在几秒钟内生成):

[GC 3373764K->3336654K(10468736K), 0.6677560 secs]
[GC 3472974K->3427592K(10468736K), 0.5059650 secs]
[GC 3563912K->3517273K(10468736K), 0.6844440 secs]
[GC 3622292K->3589011K(10468736K), 0.4528480 secs]
Run Code Online (Sandbox Code Playgroud)

问题是我认为UseConcMarkSweepGC可以避免这种情况,或者至少使它非常罕见.相反,超过100毫秒的延迟几乎每分钟发生一次或更多(尽管超过1秒的延迟相当罕见,可能每10或15分钟一次).

另一件事是我认为只有一个FULL GC会导致线程被暂停,但这些似乎不是完整的GC.

可能需要注意的是,大多数内存都是由使用软引用的LRU内存缓存占用的.

任何帮助或建议将不胜感激.

java performance garbage-collection jvm jvm-arguments

10
推荐指数
3
解决办法
1万
查看次数

Apache Cassandra如何进行聚合操作?

我对Apache Cassandra和nosql很新.

在SQL中我可以进行聚合操作,如:

SELECT 
  country, sum(age) / count(*) AS averageAge 
FROM people 
GROUP BY country;
Run Code Online (Sandbox Code Playgroud)

这很好,因为它是在DB中计算的,而不是必须将'people'表中的每一行移动到客户端层来进行计算.

在Apache Cassandra中这可能吗?怎么样?

cassandra nosql

10
推荐指数
1
解决办法
1万
查看次数

我可以将字符串编码为整数,以保留字典字符串的接近度吗?

我希望将不同长度的字符串(通常为1-100个字符)编码为整数,使得字典相似的字符串(它们将在字典中靠近在一起)产生紧密相连的整数,同时进一步确保这些整数在可能的整数值范围内合理均匀分布.

我认识到确保均匀分布可能需要在编码之前对可能的字符串进行某种调查.

有没有人对如何做到这一点有任何想法?

algorithm hash hashcode

9
推荐指数
1
解决办法
2130
查看次数

是否有一个库根据JavaScript的beta版本生成随机数?

我需要在Beta概率分布中从JavaScript生成随机数.我用Google搜索但找不到任何支持此功能的库.

任何人都可以建议我在哪里可以找到可以执行此操作的库或代码段?

javascript statistics

9
推荐指数
2
解决办法
2580
查看次数

如何更有效地实现这一点

所以我有一个函数(我用伪函数语言写这个,我希望它清楚):

dampen (lr : Num, x : Num) = x + lr*(1-x)
Run Code Online (Sandbox Code Playgroud)

我希望将这n次应用于值x.我可以递归地实现它:

dampenN (0, lr, x) = dampen(lr, x)
dampenN (n, lr, x) = dampenN(n-1, lr, dampen(x))
Run Code Online (Sandbox Code Playgroud)

但是必须有一种方法可以在数学上做到这一点,而不需要求助于迭代过程(递归或循环).

不幸的是,我的代数技能已经超乎想象了,任何人都可以帮忙吗?

algorithm math algebra

8
推荐指数
2
解决办法
379
查看次数

Play Framework是否支持"片段"?

如果我想在多个页面上有一个共同的UI,例如菜单,建议的方法是什么?

它将包含模板代码和后端控制器(类似于LiftWeb框架中的"片段").

我知道Play有一个菜单模块,但我对如何实现这一目标更感兴趣.

java playframework

8
推荐指数
1
解决办法
1955
查看次数

在Java中有效压缩10-1000个字符的字符串?

我需要将10到1000个字符的字符串(用已知但可变的语言编写)压缩成单独的UDP数据包.

Java中可用的哪些压缩算法非常适合此任务?

是否有可用的开源Java库?

java compression

8
推荐指数
3
解决办法
1万
查看次数

有什么东西在Ubuntu上不断杀死我的Java进程,有谁知道为什么?

所以每隔几天我在Ubuntu上的java进程就会被自动杀死,我无法弄明白为什么.

我的盒子有35.84 GB的RAM,当我启动我的Java进程时,我将-xmx28g参数传递给它,所以它的使用方式应该小于可用的最大RAM.

我按如下方式运行jstat:

# jstat -gccause -t `pgrep java` 60000
Run Code Online (Sandbox Code Playgroud)

在进程被杀之前jstat的最后几行输出是:

Time     S0     S1     E      O      P       YGC   YGCT       FGC FGCT     GCT     LGCC                 GCC
14236.1  99.98   0.00  69.80  99.40  49.88   1011  232.305    11  171.041  403.347 unknown GCCause      No GC
14296.2  93.02   0.00  65.79  99.43  49.88   1015  233.000    11  171.041  404.041 unknown GCCause      No GC
14356.1  79.20   0.00  80.50  99.55  49.88   1019  233.945    11  171.041  404.986 unknown GCCause      No GC
14416.2   0.00  99.98  24.32  99.64  49.88   1024  234.945    11  171.041 …
Run Code Online (Sandbox Code Playgroud)

java ubuntu garbage-collection jstat

8
推荐指数
2
解决办法
1万
查看次数

如何使Java格式像-3.2而不是-3.1999999999999953?

我的应用程序正在生成Double.toString()生成"-3.1999999999999953"的双打 - 而我希望它生成"-3.2".

我实际上从JScience获得这些双打Amount#getEstimatedValue().

我不想为精度设置任意数量的数字,因为我不知道有多少位数是重要的,但我不希望它产生以"99999999.*"结尾的数字.

如何在没有这个问题的情况下将双打转换为字符串?

java jscience

8
推荐指数
1
解决办法
660
查看次数

如何在使用GAE Maven插件时在IDEA中调试Java Google App Engine应用程序?

我已经建立了我的pom.xml 像这样,它似乎是工作在大多数情况下,我可以开始devserver和更新应用程序.

我的问题是我似乎无法调试devserver.我尝试在IDEA中以调试模式启动devserver maven目标,但是当我设置断点时,它们会被忽略.

我在GAE Maven插件文档中发现,您可以使用以下配置在调试模式下启动devserver:

<jvmFlags>
  <jvmFlag>-Xdebug</jvmFlag>
  <jvmFlag>-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n</jvmFlag>
</jvmFlags>
Run Code Online (Sandbox Code Playgroud)

但是,当我启动Maven Run/Debug配置时,我不知道如何告诉IDEA连接调试器.

谁能指出我正确的方向?

java google-app-engine intellij-idea maven

8
推荐指数
1
解决办法
2445
查看次数