【发布时间】:2022-08-23 13:31:38
【问题描述】:
我需要在关机时执行一些中等负载,但在 AWS 中,机器只给线程执行 2 秒或更短的时间,并且只消耗了 45-47% 的负载。
有没有办法增加这个?还是我无能为力!
话题开始了。
07:22:09.476 [Thread-61] INFO com.company.main.Main.lambda$run$0(307) - Shutdown process start with thread: [Thread-61]
最后一行。
07:22:11.026 [Thread-61] DEBUG c.p.w.company.lambda$sort$1(341)
如您所见,线程完成需要 1.5 秒,我需要完成该方法:(
我们正在使用 EC2!
对不起,如果问题很简单,但这让我做噩梦。
代码不是我的,但是是这样的。
public class Main extends Thread {
在公共静态方法中,我们创建了一些线程。
for (int i = 0; i < threads; i++) {
Main main = (Main) ctx.getBean(\"beanName\");
main.setName(\"main-\" + i);
main.start();
}
主班跑方法覆盖
@Override
public void run() {
if (StringUtils.equals(\"main-0\", Thread.currentThread().getName())) {
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
doWork();
}));
}
如您所见,我们正在创建的 1 个主线程上创建关闭,我确实在主要的线程也是如此,但同样的事情也会发生。
-
你在哪里运行它?拉姆达? EC2?你怎么关闭它?
-
嗨@Michael EC2!亚马逊正在关闭机器!
-
这将取决于运行时的结束方式。某些进程信号(例如
SIGKILL)和进程内调用(例如Runtime#halt)不会可靠地调用关闭挂钩。您可能需要查看 AWS 的文档以了解如何处理这种情况。 -
根据我发现的其他一些线程,它应该等待几分钟或更长时间,所以我怀疑这是 JVM 而不是与 AWS 有任何关系。也许您的关闭任务是异步的,因此会解除对关闭线程的阻塞?
-
包括关闭挂钩的代码。
标签: java amazon-web-services amazon-ec2 shutdown-hook