我们在经纪人网络中设置了4个ActiveMQ代理(每个代理在一个单独的服务器上运行).大约有60个生产者.生产者使用JDNI从Glassfish查找ActiveMQ连接工厂.
Glassfish中配置的ActiveMQ URI如下:
failover:(tcp://phxgapm01:61616,tcp://phxgapm02:61616,tcp://phxgapm03:61616,tcp://phxgapm04:61616)?randomize=true&backup=false&maxReconnectAttempts=8
Run Code Online (Sandbox Code Playgroud)
每个生成器进程执行javax.jms.ConnectionFactory的JNDI查找,然后创建1个javax.jms.Connection.当生成器运行时,它将定期创建一个javax.jms.Session和javax.jms.MessageProducer,将一些消息发送到队列,然后关闭Session和MessageProducer.
这就是所有背景 - 现在我的问题.从一些但不是所有的生产者,我们将看到如下的日志输出流:
2014-12-30 21:07:06,534 INFO FailoverTransport - Successfully connected to tcp://phxgapm03:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,538 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,544 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,548 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,552 INFO FailoverTransport - Successfully connected to tcp://phxgapm01:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,556 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1] …Run Code Online (Sandbox Code Playgroud) 我正在尝试理解我们正在处理的Java进程问题.这个过程已经在生产中运行了大约4个月,本周早些时候它开始悬挂.当我查看进程的线程转储时,所有相关线程(3)都有如下堆栈:
"TxnParser_1" prio=6 tid=0x69bd3400 nid=0x2534 runnable [0x6aa2f000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at oracle.net.ns.Packet.receive(Unknown Source)
at oracle.net.ns.DataPacket.receive(Unknown Source)
at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1099)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1070)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:478)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:790)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:830)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1687)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1653)
- locked <0x40e22f88> (a oracle.jdbc.driver.T4CStatement)
- locked <0x28f8d398> (a oracle.jdbc.driver.T4CConnection)
at com.gcg.data.LogParsingInfo.initFromDB(LogParsingInfo.java:262)
at com.gcg.om.OmQueueEntry.initParseInfoFromDB(OmQueueEntry.java:104)
at com.gcg.om.GenericQueueEntry.run(GenericQueueEntry.java:237)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud)
没有线程等待锁定,因此进程没有死锁.这些正在完成工作的3个线程只是被阻塞等待Oracle的响应,至少这对我来说是这样的.
看看Oracle,当我查询v $ session时,看起来与这些线程关联的一个连接当前正在执行查询,尽管我看不到sql.
select ... …Run Code Online (Sandbox Code Playgroud) 产生"测试结果趋势"图的数据实际上来自哪里?我有一个"仅测试"作业,在target/surefire-reports中生成2个文件.(由maven制作)直接检查文件显示测试正在执行和传递.
该图显示了沿x轴成功构建但没有测试结果.如果我从项目页面单击特定的构建,它会在"测试结果"链接旁边显示"(无测试)".
我需要对XML文件进行某种后处理吗?它们采用JUnit格式,由maven-soapui-plugin生成.
谢谢!
我在这上面花了一天时间,但找不到有效的解决方案。在我们的应用程序中,我们有几个端点可以返回大响应。我一直在尝试寻找一种机制,允许我们在处理数据库查询结果时流式传输响应。主要目标是限制服务端的峰值内存使用(不需要内存中的整个响应)并最小化响应第一个字节的时间(如果响应没有开始进入,客户端系统会超时)指定时间 - 10 分钟)。我真的很惊讶这这么难。
我找到了 StreamingResponseBody ,它看起来很接近我们想要的东西,虽然我们并不真正需要异步方面,但我们只希望能够在处理查询结果时开始流式传输响应。我也尝试过其他方法,例如使用@ResponseBody 进行注释、返回 void 并添加 OutputStream 的参数,但这不起作用,因为传递的 OutputStream 基本上只是一个缓存整个结果的 CachingOutputStream。这是我现在所拥有的......
资源方法:
@GetMapping(value = "/catalog/features")
public StreamingResponseBody findFeatures(
@RequestParam("provider-name") String providerName,
@RequestParam(name = "category", required = false) String category,
@RequestParam("date") String date,
@RequestParam(value = "version-state", defaultValue = "*") String versionState) {
CatalogVersionState catalogVersionState = getCatalogVersionState(versionState);
log.info("GET - Starting DB query...");
final List<Feature> features
= featureService.findFeatures(providerName,
category,
ZonedDateTime.parse(date),
catalogVersionState);
log.info("GET - Query done!");
return new StreamingResponseBody() {
@Override
public void writeTo(OutputStream outputStream) throws IOException {
log.info("GET - …Run Code Online (Sandbox Code Playgroud) java ×3
database ×1
glassfish ×1
http-chunked ×1
jenkins ×1
jms ×1
maven-3 ×1
oracle ×1
soapui ×1
spring-boot ×1