小编fgy*_*ica的帖子

Java中的Ruby解析器

我正在做的项目是用Java和解析器源代码文件编写的.(Java src到现在为止).现在我想启用解析Ruby代码.因此,我正在寻找一个解析Ruby源代码的Java解析器.

到目前为止,我唯一能找到的是Ruby中的Ruby解析器(ParseTree和RubyParser ......).我可以用JRuby中的Ruby解析器解析我想要的源文件,然后从那里访问我的Java东西.但这意味着我将无法重用我以前编写的许多Java代码.

在Java中是否有一个像样的Ruby解析器并且我无法找到它?或者有人看到更好的解决方案?

ruby java parsing jruby

5
推荐指数
1
解决办法
1032
查看次数

Java垃圾收集:次要,主要,完整

我试图在大型企业Java应用程序中挂起垃圾收集.我有GC日志并开始使用各种工具查看它们 - 这里的截图是使用GCViewer完成的.(遗憾的是,没有更详细的GC信息的日志...)

我还在阅读我们正在使用的Java Hotspot VM垃圾收集.

但我仍然有些困惑:下面是GC图表放大部分的屏幕截图.

放大垃圾收集图

这里有三件事:

  1. 蓝线的"小曲折"(你几乎看不到):据我所知,这些是年轻空间中的 gc周期.
  2. 有一个黑色条,这是一个阻塞的10s全GC,可以在日志中看到:

    1751585.394: [Full GC 1433326K->660045K(1552832K), 10.1157600 secs]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后是蓝线的"大曲折"(在左边的水滴中显示).这让我很困惑.

模式#3的日志不会将其标记为完整GC,但看起来与其他类似...

    1749795.648: [GC 1299871K(1552832K), 0.0402933 secs]
Run Code Online (Sandbox Code Playgroud)
  • 这也是一个次要GC吗?
  • 如果是,为什么同时发生两种不同的小型垃圾收集模式(#1和#3)?
  • 或者Young空间中的小GC和Tenured中的完整GC之间还有其他什么?

编辑.其他一些信息:
GC使用:并发Mark-Sweep GC
吞吐量为93.8%
最长暂停:10.116秒
暂停时间:6.21%

java garbage-collection

5
推荐指数
1
解决办法
1437
查看次数

从命令行重命名Yakuake会话

Yakuake提供了一个热键和GUI方式来重命名命令行选项卡/会话.

我想通过命令行执行相同操作,因此我可以编写脚本并在别名中使用它.(我的目标是,如果我使用对某个服务器执行SSH的别名,则根据此服务器名称重命名该选项卡...)

我尝试了这里显示的建议在ssh之后从命令行重命名Konsole会话到目前为止没有运气.

ssh kde yakuake

5
推荐指数
1
解决办法
1183
查看次数

来自 Hibernate 的同步类加载器调用

我们的项目中存在性能问题,这似乎源于(至少部分)Hibernate 使用类加载器的方式。这是在 Java 线程转储中发现的,这些转储是在我们内部环境的高负载测试期间进行的。转储的 JVM 是运行应用程序的 Weblogic 托管服务器的 JVM,在监控仪表板显示占用线程和待处理用户请求时进行转储。

例子:

"[ACTIVE] ExecuteThread: '126' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=10 tid=0x00007f2fe9486000 nid=0x663b waiting for monitor entry [0x00007f2faeae6000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:405)
    - waiting to lock <0x000000078c0d76b0> (a weblogic.utils.classloaders.GenericClassLoader)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:178)
    at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:187)
    at org.hibernate.internal.util.ReflectHelper.getConstantValue(ReflectHelper.java:278)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl$JavaConstantConverter.handleDotStructure(QueryTranslatorImpl.java:592)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl$JavaConstantConverter.visit(QueryTranslatorImpl.java:587)
Run Code Online (Sandbox Code Playgroud)

我们可以在这些线程转储(使用 Samurai/TDA)中看到的是,似乎随时都有大量线程在等待锁定类加载器。这个由 WLS 提供的类加载器似乎是同步的 - 这解释了锁定/阻塞线程模式......

似乎 Hibernate 使用类加载器来评估查询中的表达式。所以我不确定类加载器调用是否真的加载了任何新类。

问题是对类加载器的调用次数似乎一直在进行……有时我观察到多达 30% 的线程总数(~30-40 + 我们的 130)等待获取一个类加载器锁!

-->当大量线程试图为高用户负载(即许多 Hibernate 查询)提供服务时,WLS 类加载器的同步似乎会导致非常高的内部开销

这种行为是正常的还是我们做错了什么?

现在这个同步的类加载器问题似乎是限制我们应用程序吞吐量的主要原因,导致重负载下的性能下降。此外,如果我们扩展 CPU/内存或各种 WLS 特定池(如 …

java hibernate weblogic class classloader

5
推荐指数
1
解决办法
1939
查看次数

实例化XMLStreamWriterFactory失败:不支持的属性isRepairingNamespaces

在我们的应用程序中,我们遇到非常零星的运行时异常,这会导致我们的消息处理器崩溃(这些处理器是在Java 8上运行的独立Java进程).在此异常时,处理器通常尝试执行Web服务调用.

例外是

java.lang.Error: Failed to create new instance of com.sun.xml.internal.ws.api.streaming.XMLStreamWriterFactory$1
  at com.sun.xml.internal.ws.api.streaming.ContextClassloaderLocal.createNewInstance(ContextClassloaderLocal.java:63)
  ..
Caused by: java.lang.IllegalArgumentException: Unable to access unsupported property javax.xml.stream.isRepairingNamespaces
  at weblogic.xml.stax.ConfigurationContextBase.check(ConfigurationContextBase.java:90)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,整个应用程序在99.9%的时间内运行没有错误:上述异常很少发生(大约每隔几天).崩溃后,处理器会自动重启,并再次完美运行,直到在看似随机的间隔后再次发生相同的异常.

到目前为止,我们无法将此与JVM或运行应用程序的主机上的任何错误行为相关联.

有没有人有任何关于为什么这样的unsupported property javax.xml.stream.isRepairingNamespaces例外可能偶尔出现的指针?

我们正在运行jdk1.8.0_66Red Hat 4.8.5-4.使用生成Web服务接口JAX-WS.


编辑:
我无法共享类路径(很多内部信息,抱歉).我们确实拥有Weblogic完整客户端:wlfullclient-12.1.3.jar.它通过ServiceLoader定义XML工厂

META-INF/services/javax.xml.stream.XMLOutputFactory --> weblogic.xml.jaxp.RegistryXMLOutputFactory
Run Code Online (Sandbox Code Playgroud)

其中xml-apis-1.4.01.jar(也在类路径上)包含javax/xml/stream/XMLOutputFactory.class(与ConfigurationContextBase中抛出的异常相关).

这可能是问题的一部分吗?

java jax-ws classloader xmlstreamwriter

5
推荐指数
1
解决办法
378
查看次数

OkHttp:连接池和文件句柄

我们对来自Android应用程序的所有网络流量使用Retrofit/OkHttp3.到目前为止,一切似乎都很顺利.

但是,我们现在偶尔会让我们的应用程序/进程耗尽文件句柄.

  • Android允许每个进程最多1024个文件句柄
  • OkHttp将为每个异步调用创建一个新线程
  • 以这种方式创建的每个线程将(从我们的观察)负责3个新文件句柄(2个管道和一个套接字).

我们能够准确地调试它,每次调度异步调用.enqueue()将导致打开文件句柄增加3.

问题是,ConnectionPoolOkHttp中的连接线程似乎比实际需要的时间长得多.(这篇文章谈了五分钟,虽然我没有看到这个指定的任何地方.)

  • 这意味着如果您快速调度请求,连接池的大小将会增加,文件句柄数量也会增加 - 直到达到应用程序崩溃的1024.

我已经看到有可能限制并行调用的数量Dispatcher.setMaxRequests()(尽管似乎不清楚这是否真的有效,请参见此处) - 但这仍然无法解决开放线程和文件句柄堆积的问题.

我们怎么能阻止OkHttp创建太多文件句柄?

file-descriptor filehandle threadpool okhttp okhttp3

5
推荐指数
1
解决办法
1419
查看次数

Ansible:模拟"传递时间"模块

Ansible提供了一个failed_when模块,允许用户在其任务上指定某些失败条件,例如在stdout或stderr中找到某个字符串.

我试图做相反的事情:如果在stdout或stderr中找到任何一组字符串,我希望我的任务不会失败.换句话说,我想要一些接近passed_when模块功能的东西.

  • 当返回码为0时,我仍然希望它正常传递.
  • 但是如果它会失败(rc!= 0)那么它应该首先检查一些字符串的出现.
  • 即如果找到一些字符串,它无论如何都会通过.

我的理由是这样的:

任务可能失败的原因有很多 - 但其中一些原因,取决于输出,我不认为是当前环境中的失败.

有没有人知道如何实现这一目标?

error-handling module ansible

4
推荐指数
1
解决办法
5098
查看次数

更新可变HashMap值,这是一个可变集合

我的地图看起来像这样:Map[ A -> Collection[B]].这个地图在一个循环中得到更新 - 然而,特殊的是,更新主要只是意味着将一个元素B添加到Collection [B](对于某些键A).

我试图通过将我的Collection的类型从List []更改为ListBuffer []来查明是否可以获得一些加速.

到目前为止,我的代码看起来像这样(简化):

var incoming = new HashMap[A, List[B]() {
  override def default(a: A) = List()
}
..
for(b < someCollectionOfBs){
  ..
  incoming(b.getA) = b :: incoming(b.getA)
  ..
}
Run Code Online (Sandbox Code Playgroud)

这很好用.现在,我改变了地图的类型,使它看起来像这样:

var incoming = new collection.mutable.HashMap[A, ListBuffer[B]() {
  override def default(a: A) = collection.mutable.ListBuffer()
}
..
for(b < someCollectionOfBs){
  ..
  incoming(b.getA) += b
  ..
}
Run Code Online (Sandbox Code Playgroud)

请注意第二个示例中元素B如何添加到集合中的更改(不再是不可变列表,因此我们不需要创建和分配新集合...).

但是.这不起作用:incoming(X) += ..没有没有更新地图为X的值,其实它并没有改变任何东西.

我在这里错过了什么?我认为我应该能够更新可变HashMap的值...所以,如果我的值是可变集合,为什么我不能只添加元素?

collections scala mutable map

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

D3选择性变焦

我正在研究一种力导向的图形布局,其中包含一些附加功能:可选择的链接/节点,工具提示,鱼眼效果,以及 - 对我的问题很重要 - 缩放和平移.

现在,缩放工作非常好,如下所示:

d3 ... .append('svg:g').call(d3.behavior.zoom().on("zoom", redraw))... 
Run Code Online (Sandbox Code Playgroud)

重绘功能看起来像这样......

function redraw() {
  trans = d3.event.translate;
  scale = d3.event.scale;
  vis.attr("transform", "translate(" + trans + ")" + " scale(" + scale + ")");
}
Run Code Online (Sandbox Code Playgroud)

但是,此方法会缩放整个SVG图形,包括字体大小,图形边缘,节点周围的线条笔划宽度等.

是否有可能缩放某些元素?到目前为止,我看到的唯一解决方案是放一条这样的线(从这里开始http://jsfiddle.net/56RDx/2/)

node.attr("font-size", (nodeFontSize / d3.event.scale) + "px");
Run Code Online (Sandbox Code Playgroud)

在重绘方法中,基本上反转某些元素的动态缩放.然而,我的问题是(除了这是一个丑陋的黑客),我的边缘宽度是在图形绘制上动态生成的(根据一些图形属性...),所以这种'反转'方法不起作用......

javascript zoom d3.js force-layout

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

Ruby的停用词列表

我正在使用Lucene Java框架编写搜索引擎.

我想要做的是创建一个Ruby源代码文件的索引.为此,我想选择使用停用词过滤器,即我希望在索引文件时忽略ruby语言的停用词.

- >有没有人知道Ruby停止词的完整列表?(例如def,end,module,......)

令人惊讶的是,谷歌没有给我一个答案......所以任何帮助将不胜感激!

ruby list cpu-word

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