我的一个应用程序在负载运行的一段时间内挂起,是否有人知道在jstack中可能导致此类输出的原因:
"scheduler-5" prio=10 tid=0x00007f49481d0000 nid=0x2061 waiting on condition [0x00007f494e8d0000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000006ee117310> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1085)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Run Code Online (Sandbox Code Playgroud)
当它挂起时,我在jstack输出中看到了很多.
我大量使用Spring @Async和地图,同步地图和ehcache.
有趣的是,这只发生在一个app实例上.另外两个人跑得很好.还有什么我可以调查以获得更多细节?
我发现这篇文章/sf/ask/1679495121/,但在我的情况下它并不是很有用.
我正在尝试修改现有的MimeMessage正文部分.我想过滤某些链接.有没有人知道为什么即使身体部分内容接缝要更改消息与旧内容一起发送?是否有一些缓存?不知道怎么解决这个问题?
这是我的代码:
public void resend(InputStream data) throws Exception {
Session mailSession = createMailSession();
//mailSession.setDebug(true);
Transport transport = mailSession.getTransport();
MimeMessage message = new MimeMessage(mailSession, data);
Object content = message.getContent();
if (content.getClass().isAssignableFrom(MimeMultipart.class)) {
MimeMultipart mimeMultipart = (MimeMultipart) content;
for (int i = 0; i < mimeMultipart.getCount(); i++) {
BodyPart bodyPart = mimeMultipart.getBodyPart(i);
if (bodyPart.getContentType().startsWith("text/plain")) {
String cnt = updateContent((String) bodyPart.getContent());
System.out.println("ContentType = " + bodyPart.getContentType());
System.out.println("Content = " + cnt);
bodyPart.setContent(cnt, bodyPart.getContentType());
} else if (bodyPart.getContentType().startsWith("text/html")) {
String cnt = updateContent((String) bodyPart.getContent()); …Run Code Online (Sandbox Code Playgroud) 我在GAE for Java小组上发布了这个,但我希望能更快地得到一些答案:)
我决定对我的应用程序进行一些长期性能测试.我每5-30分钟创建一个小客户端点击应用程序,我用这样的客户端运行3-5个线程.
我发现响应时间差异很大,并开始调查问题.我发现原因很快.我遇到了以下主题中描述的相同问题:
获取"请求在等待太长时间后尝试为您的请求提供服务时中止".申请闲置后
我正在使用Springframework,它需要大约18到20秒来启动应用程序实例,这会导致响应时间从1秒(当请求点击运行应用程序时非常罕见)到创建新应用程序时的22秒.
这有什么解决方案吗?我正在考虑创建最基本的servlet来执行关键任务(提供API调用)并保持UI不变.但是我会放弃Springframework的所有好处.
这有什么解决方案吗?
在解决(黑客攻击)App Engine的许多限制之后,我在开发我的应用程序时遇到了这个限制,我认为这将使我离开App Engine ...这一直是很多时候想到如何赢得GAE问题而不是如何解决我的应用问题...
有帮助吗?
关心康拉德