У меня есть автономное приложение, в котором я пытаюсь создать 5 потоков для каждого потока. Я создаю mongoclient и сохраняю детали в MongoDB, а затем закрываю mongoclient.
Когда я запускаю свою службу mongo, она работает, но как только я запускаю свое java-приложение через некоторое время, моя служба mongo перестает работать, и я вижу следующую ошибку в системном журнале.
Out of memory: Kill process 12715 (mongod) score 433 or sacrifice child\\
kernel: [2946780.340246] Killed process 12715 (mongod) total-vm:6646800kB, anon-rss:6411432kB, file-rss:0kB
Я использую сервер Linux, у которого есть 10 ГБ оперативной памяти. Насколько мне известно, мы можем выполнять тысячи транзакций в MongoDB. И прежде чем я начну, я вижу свободную память, через некоторое время я получаю указанную выше ошибку.
Не уверен, что именно делать, нужно ли нам что-то настраивать на сервере Linux для обработки нескольких запросов mongo? или мне нужно увеличить лимит службы mongo где-нибудь?
Кто-нибудь может предложить мне это?
Заранее спасибо.
o / p of free -m до и после выполнения моей java следующие приложения:
До:
total used free shared buffers cached
Mem: 14032 7646 6385 54 4 153
-/+ buffers/cache: 7489 6542
Swap: 0 0 0
После:
total used free shared buffers cached
Mem: 14032 13845 186 54 106 4131
-/+ buffers/cache: 9607 4425
Swap: 0 0 0
Ниже приведены сведения из mongod.conf
# mongod.conf
storage:
dbPath: /xxx/xxx
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: 127.0.0.1,xx.xx.xx.xx
processManagement:
fork: true
security:
authorization: enabled
Вывод cat / proc /
:
cat /proc/17694/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 112088 112088 processes
Max open files 1024 4096 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 112088 112088 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
ps xua | grep java results :::
root 17142 0.4 3.1 5645648 453180 pts/0 Sl Sep04 2:27 java -d64 -Xms1024m -Xmx2048m -server -cp bin:lib/* javaclassname -resourceDir /xxx/bin -dataDir /xxx/data
root 17491 22.1 11.2 5653432 1610716 pts/0 Sl Sep04 115:14 java -d64 -Xms1024m -Xmx2048m -server -cp bin:lib_new/* javaclassname -resourceDir /xxx/bin -dataDir /xxx/data -outConfigPath /xxx/xxx.xml -outCatBrandPath /xxx/xxx.xml -outCatAndSunCatPath /xxx/xxx.xml
xxx 19223 3.5 22.1 20396560 3184668 ? Sl Aug28 398:11 /usr/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/elasticsearch-5.4.0 -cp /elasticsearch-5.4.0/lib/* org.elasticsearch.bootstrap.Elasticsearch
root 21617 2.2 21.7 18549248 3124416 ? Sl Aug28 247:34 /usr/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-8.0.30/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/opt/apache-tomcat-8.0.30/endorsed -classpath /opt/apache-tomcat-8.0.30/bin/bootstrap.jar:/opt/apache-tomcat-8.0.30/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-8.0.30 -Dcatalina.home=/opt/apache-tomcat-8.0.30 -Djava.io.tmpdir=/opt/apache-tomcat-8.0.30/temp org.apache.catalina.startup.Bootstrap start
swapon -s output:
Filename Type Size Used Priority
Похоже, что в операционной системе заканчивается физическая память, и, поскольку на вашем сервере, похоже, не настроен какой-либо своп, срабатывает убийца нехватки памяти ядра (OOM-killer) in и завершает процессы, чтобы освободить часть оперативной памяти (в данном случае это mongodb, но может быть любой другой).
Вы должны создать раздел подкачки на этом сервере.