当前位置: 首页 > 知识库问答 >
问题:

java.lang.OutOfMemoryError与不和谐JDA 350线程

蒋栋
2023-03-14

所以我会尽力解释我的问题。目前,我正在进行一项规模相当可观的计划。然而,正如350所说,我从未使用过这么多线程。它目前给了我一个内存不足的错误,但我已经尝试了多种选择:

  • 添加-Xss参数
  • 添加我可以在这个网站上找到的其他参数
  • 此外,我还尝试编辑堆栈大小和用户限制

下面列出了内存溢出问题的错误。

java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
        at java.base/java.lang.Thread.start0(Native Method)
        at java.base/java.lang.Thread.start(Thread.java:804)
        at okhttp3.internal.http2.Http2Connection.start(Http2Connection.java:515)
        at okhttp3.internal.http2.Http2Connection.start(Http2Connection.java:499)
        at okhttp3.internal.connection.RealConnection.startHttp2(RealConnection.java:299)
        at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:288)
        at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:169)
        at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257)
        at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135)
        at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114)
        at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:264)
        at okhttp3.RealCall.execute(RealCall.java:93)
        at net.dv8tion.jda.internal.requests.Requester.execute(Requester.java:200)
        at net.dv8tion.jda.internal.requests.Requester.execute(Requester.java:140)
        at net.dv8tion.jda.internal.requests.Requester.execute(Requester.java:123)
        at net.dv8tion.jda.internal.requests.ratelimit.BotRateLimiter$Bucket.run(BotRateLimiter.java:468)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:835)
[111,061s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached.
Exception in thread "Thread-365" java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
        at java.base/java.lang.Thread.start0(Native Method)
        at java.base/java.lang.Thread.start(Thread.java:804)
        at java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:937)
        at java.base/java.util.concurrent.ThreadPoolExecutor.ensurePrestart(ThreadPoolExecutor.java:1583)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:346)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:562)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor.execute(ScheduledThreadPoolExecutor.java:705)
        at okhttp3.internal.http2.Http2Connection$ReaderRunnable.applyAndAckSettings(Http2Connection.java:738)
        at okhttp3.internal.http2.Http2Connection$ReaderRunnable.settings(Http2Connection.java:710)
        at okhttp3.internal.http2.Http2Reader.readSettings(Http2Reader.java:289)
        at okhttp3.internal.http2.Http2Reader.nextFrame(Http2Reader.java:141)
        at okhttp3.internal.http2.Http2Reader.readConnectionPreface(Http2Reader.java:80)
        at okhttp3.internal.http2.Http2Connection$ReaderRunnable.execute(Http2Connection.java:607)
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
        at java.base/java.lang.Thread.run(Thread.java:835)

当我发现无论我做什么,线程堆栈大小总是看起来是1024。

我目前从具有以下规格的VPS运行此. jar文件:

  • 无限制流量

我的问题是,有没有办法编辑这个线程堆栈大小?

另一个单独的问题:每当我使用-Xss2g时,它确实会显示它超出了限制,但是有没有办法编辑这个限制?

共有2个答案

宇文智敏
2023-03-14

我实际上设法弄清楚了。

我托管的提供商将我可以同时运行的线程数量限制为1300个线程。因为他们有固定的数量,所以我的线程一直遇到问题,错误也显示在问题中。

因为他们锁定了这个金额,我的选择受到限制,所以我决定换一个提供商。

夏涵畅
2023-03-14

您可以尝试配置JDA并更改默认值以减少内存占用。确保您也使用最新版本的JDA(目前为4.2.0_252)。

阅读常见问题解答:如何减少机器人的内存占用?

 类似资料:
  • 我使用repl。它让我的不和机器人。我使用Python并遵循本教程: https://www.youtube.com/watch?v=SPTfmiYiuok 这是我的代码:

  • 我已经创建了一个bot,它现在在我的discord服务器中,使用下面的代码。 我的问题是,一旦我在与bot不和谐的聊天中,我如何调用命令让bot运行代码,为用户列表收集csv?我不确定如何调用机器人,一旦它在聊天/服务器中获得列表。

  • 我做了很多关于如何阻止一个频道使用命令的研究,比如Rythm的黑名单,但是我没有找到,有人能帮我吗?

  • 我正在尝试制作一个Python Discord机器人,它首先可以删除通道中的消息。我希望它是以《终结者3》为主题的,这样它会由用户说天网开始,然后机器人要求激活Y或N?当用户输入Y时,它会删除频道中的所有消息,如果用户输入N,它会说审判日不可避免。任何帮助都将不胜感激。

  • 您好,我尝试使用HttpsConnection从不和谐服务器获取响应,但服务器响应错误403,我不知道为什么,我在上面的JDK 13中尝试了这段代码并且有效,但我需要JDK 8,但在这个版本上由于某种原因它不起作用。 错误: 线程“main”java.io.IOException中的异常:服务器返回HTTP响应代码:403用于URL:https://discord.com/api/v9/users

  • 我目前正在编写一个discord bot反应角色命令。 一切都很顺利,但我有一个问题。 当我启动机器人并运行创建嵌入的命令时,一切都很好。问题是当我对信息做出反应时,它并没有给我这个角色。这是我的代码: