Java.lang.OutOfMemoryError с потоками Discord JDA 350+JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java.lang.OutOfMemoryError с потоками Discord JDA 350+

Сообщение Anonymous »

поэтому я постараюсь объяснить свою проблему как можно лучше. Сейчас я работаю над вполне приличной по масштабу программой. Однако я никогда не работал с таким количеством потоков, как сказано 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.
Изображение

В настоящее время я запускаю этот файл .jar с VPS со следующими характеристиками:
  • неограниченный трафик
  • 32 ГБ ОЗУ
  • 600 ГБ SSD
  • 16 ядер
Мой вопрос: есть ли способ изменить размер стека потоков?
Еще один отдельный вопрос: всякий раз, когда я использую -Xss2g, он показывает мне, что он превышает предел, но есть ли способ отредактировать это лимит?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»