Привет, мы используем Apache Ignite 2.7 (8 узлов по 120 ГБ каждый) и настраиваем кучу 16 ГБ и область данных 100 ГБ (с постоянным включением).Используя собственное отслеживание памяти, мы видим, что обычно ожидаемые категории, такие как куча, поток и т. Д., Соответствуют ожиданиям, но «Внутренняя» (т.е. вне кучи) занимает колоссальные 132 ГБ.Это помимо всего прочего, что JVM должна запустить.С таким огромным запросом памяти со стороны JVM система приводится в состояние нехватки памяти (ОС не в оперативной памяти).
В качестве эксперимента мы сократили область данных до 1 ГБ и измерили использование внутренней памяти JVM до ипосле активации сетки (сетка активируется клиентским узлом, который мы подключаем).Мы увидели, что внутренняя (читай: небезопасная вне кучи) память увеличилась с 62 154 до 32 897 187 КБ при активации сетки.Таким образом, кажется, что накладные расходы 32 ГБ не зависят от размера области данных.
Эти 32 ГБ дополнительного системного ОЗУ являются для нас настоящей проблемой.Почему Ignite делает это и как нам это контролировать?
Вот типичная сводная память, которую мы видим.Обратите внимание на ОГРОМНОЕ внутреннее выделение.
Для области данных по умолчанию установлено значение128 МБ, для systemRegionMaxSize установлено значение 8 ГБ, а для systemRegionInitialSize установлено значение 512 МБ.
[2019-05-17 22: 28: 39,592] [WARN] [main] [IgniteKernal] Включена загрузка класса одноранговых узлов (отключите его в рабочей среде по соображениям производительности и согласованности развертывания) [2019-05-1722: 28: 39,593] [WARN] [main] [IgniteKernal] Пожалуйста, установите системное свойство '-Djava.net.preferIPv4Stack = true', чтобы избежать возможных проблем в смешанных средах.[2019-05-17 22: 28: 40,141] [WARN] [main] [NoopCheckpointSpi] Контрольные точки отключены (для включения настройки любой реализации GridCheckpointSpi) [2019-05-17 22: 28: 40,214] [WARN] [main][GridCollisionManager] Разрешение столкновений отключено (все задания будут активированы по прибытии).[2019-05-17 22: 28: 41,690] [WARN] [main] [GridCacheDatabaseSharedManager] DataRegionConfiguration.maxWalArchiveSize вместо DataRegionConfiguration.walHistorySize будет использоваться для удаления старых архивных файлов wal [2019-05-17 22: 28: 41,826] [WARN] [main] [PartitionsEvictManager] Ведение журнала на уровне INFO без проверки, включен ли уровень INFO: Разрешает разделение Evict = 4 [2019-05-17 22: 28: 46,291] [WARN] [main] [IgniteKernal] Узлы запущены на локальном компьютеремашине требуется более 80% физической оперативной памяти, что может привести к значительному замедлению из-за подкачки (уменьшите размер кучи JVM, размер области данных или размер буфера контрольной точки) [обязательно = 12516 МБ, доступно = 14008 МБ] log4j: завершение приложения с именем [null],[2019-05-17 22: 31: 19,958] [WARN] [disco-event-worker- # 42] [GridDiscoveryManager] Значение локального узла системного свойства 'java.net.preferIPv4Stack' отличается от значения удаленного узла (все узлы в топологиидолжно иметь одинаковое значение) [locPreferIpV4 = null, rmtPreferIpV4 = true, locId8 = f25228c0, rmtId8 = eac4211d, rmtAddrs = [192.168.1.5/127.0.0.1, /192.168.1.5], rmtNode = id0-c2132 = id-cluster-9bd5-f91dfa34a0e9, order = 2, addr = [127.0.0.1, 192.168.1.5], daemon = false]] [2019-05-17 22: 32: 24,265] [WARN] [exchange-worker- # 43] [GridAffinityAssignmentCache] Ведение журнала на уровне INFO без проверки, включен ли уровень INFO: Распределение назначения локальных узлов не является идеальным [cache = default, Ожидаемый первичный = 1024.00, actualPrimary = 1024, ОжидаемыйBackups = 1024.00, actualBackups = 0, warningThreshold = 50.00%] [2019-05-17 22: 32: 24,269] [WARN] [exchange-worker- # 43] [GridAffinityAssignmentCache] Ведение журнала на уровне INFO без проверки, включен ли уровень INFO: распределение назначения локальных узлов не является идеальным[кэш = значение по умолчанию, Ожидаемые значения = 1024,00, фактические значения = 1024, ожидаемые резервные копии = 1024,00, фактические резервные копии = 0, warningThreshold = 50,00%] [2019-05-17 22: 32: 24,850] [ПРЕДУПРЕЖДЕНИЕ] [exchange-worker- # 43] [GridAffinityAssignmentCache] Ведение журнала на уровне INFO без проверки, включен ли уровень INFO: Распределение назначения локальных узлов не является идеальным [cache = default, Ожидаемый первичный = 1024.00, actualPrimary = 1024, ОжидаемыйBackups = 1024.00, actualBackups = 0, warningThreshold = 50.00%] [2019-05-17 22: 32: 24,911] [WARN] [disco-notifier-worker- # 41] [GridClusterStateProcessor] Ведение журнала на уровне INFO без проверки, включен ли уровень INFO: полученное сообщение об окончании изменения состояния: true 22: 33: 49.086[exchange-worker- # 43] ИНФОРМАЦИЯ cbaa.ceres.loader.S3CacheLoader - загрузка eb5445c7-d7fa-4018-95b6-63c4a0911eae получила инъекцию экземпляра ignite IgniteKernal [longJVMPauseDetector = LongJVauseauseDetector = LongJVMPauseDetector [workerRef = pp-детектор [работникRef = поток [j], main], longPausesCnt = 0, longPausesTotalDuration = 0, longPausesTimestamps = [0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], longPausesDurations = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], cfg = IgniteConfiguration [igniteInstanceName = null, pubPoolSize = 32, svcPoolSize = 32, callbackPoolSize = 8, stripedPoolSize = 8, sysPoolSize = 16,mgmtPoolSize = 4, igfsPoolSize = 8, dataStreamerPoolSize = 8, utilityCachePoolSize = 8, utilityCacheKeepAliveTime = 60000, p2pPoolSize = 2, qryPoolSize = 8, igniteHome = / opt / igniteWite = ignite / ignvite / ignite / ignite / ignite / ignite / ignite / ignite / ignite / ignitcom.sun.jmx.sndRetryCnt = 3, metricsHistSize = 10000, metricsUpdateFreq = 2000, metricsExpTime = 9223372036854775807, discoSpi = TcpDiscoverySpi [addrRslvr = null, sockTimeout = 5000, ackTimeout = 5000 [cl.halker.harl_harsler_harsler_harler.hl_harm_hler_harm_hler_harshlerler)], reconCnt = 10, reconDelay = 2000, maxAckTimeout= 600000, forceSrvMode = false, clientReconnectDisabled = false, internalLsnr = null], segPlc = NOOP, segResolveAttempts = 2, waitForSegOnStart = true, allResolversPassReq = true, segChkFreq = 60000Spign.om.communication.tcp.TcpCommunicationSpi$ConnectGateway@6020964a, connPlc=org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi$FirstConnectionPolicy@3f2874d5, enableForcibleNodeKill = ложь, 0.0.0 = 0, loc_LoD = 0, loc_H0_LoD_LoG_LoD_LoD_LoG_LoD_LoD_LoG_LoD_LoG_LoD_LoG_Log_LoD_LoD_LoG_Log_. 0.. .0. 0 =. 00.0, locPort = 47100, locPortRange = 100, shmemPort = -1, directBuf = true, directSndBuf = false, idleConnTimeout = 600000, connTimeout = 5000, maxConnTimeout = 600000 ,conconCnt = 10, sockSndBuf = 32768, sockRcvueBug = 106824B =, slowClientQueueLimit = 0, nioSrvr = GridNioServer [selectorSpins = 0, filterChain = FilterChain [filters = [GridNioCodecFilter[Parser=org.apache.ignite.internal.util.nio.GridDirectParser@7873ad1,
directMode = true], GridConnectionBytesVerifyFilter], закрытый = false,
directBuf = true, tcpNoDelay = true, sockSndBuf = 32768, sockRcvBuf = 32768,
writeTimeout = 2000, idleTimeout = 600000, skipWrite = false,
skipRead = false, locAddr = 0.0.0.0 / 0.0.0.0: 47100, order = LITTLE_ENDIAN,
sndQueueLimit = 1024, directMode = true, sslFilter = null,
msgQueueLsnr = null, readerMoveCnt = 0, writerMoveCnt = 0,
readWriteSelectorsAssign = false], shmemSrv = null,
usePairedConnections = false, connectionsPerNode = 1, tcpNoDelay = true,
filterReachableAddresses = false, ackSndThreshold = 32,
unackedMsgsBufSize = 0, sockWriteTimeout = 2000, boundTcpPort = 47100,
boundTcpShmemPort = -1, selectorsCnt = 4, selectorSpins = 0, addrRslvr = null,
ctxInitLatch=java.util.concurrent.CountDownLatch@7b757828 [Count = 0],
остановки = ложь],
evtSpi=org.apache.ignite.spi.eventstorage.NoopEventStorageSpi@282cb7c7,
colSpi = NoopCollisionSpi [], deploySpi = LocalDeploymentSpi [],
indexingSpi=org.apache.ignite.spi.indexing.noop.NoopIndexingSpi@50de186c,
addrRslvr = нуль,
encryptionSpi=org.apache.ignite.spi.encryption.noop.NoopEncryptionSpi@5a3bc7ed,
clientMode = false, rebalanceThreadPoolSize = 1,
txCfg = TransactionConfiguration [txSerEnabled = false,
dfltIsolation = REPEATABLE_READ, dfltConcurrency = PESSIMISTIC,
dfltTxTimeout = 0, txTimeoutOnPartitionMapExchange = 0,
pessimisticTxLogSize = 0, pessimisticTxLogLinger = 10000,
tmLookupClsName = null, txManagerFactory = null, useJtaSync = false],
cacheSanityCheckEnabled = true, discoStartupDelay = 60000,
deployMode = SHARED, p2pMissedCacheSize = 100, locHost = null,
timeSrvPortBase = 31100, timeSrvPortRange = 100,
faultDetectionTimeout = 60000, sysWorkerBlockedTimeout = null,
clientFailureDetectionTimeout = 30000, metricsLogFreq = 60000,
hadoopCfg = null, connectorCfg = ConnectorConfiguration [jettyPath = null,
host = null, port = 11211, noDelay = true, directBuf = false,
sndBufSize = 32768, rcvBufSize = 32768, idleQryCurTimeout = 600000,
idleQryCurCheckFreq = 60000, sndQueueLimit = 0, selectorCnt = 4,
idleTimeout = 7000, sslEnabled = false, sslClientAuth = false,
sslCtxFactory = null, sslFactory = null, portRange = 100, threadPoolSize = 8,
msgInterceptor = null], odbcCfg = null, warmupClos = null,
atomicCfg = AtomicConfiguration [seqReserveSize = 1000,
cacheMode = PARTITIONED, backups = 1, aff = null, grpName = null],
classLdr = null, sslCtxFactory = null, platformCfg = null, binaryCfg = null,
memCfg = null, pstCfg = null, dsCfg = DataStorageConfiguration
[sysRegionInitSize = 41943040, sysRegionMaxSize = 104857600,
pageSize = 1024, concLvl = 0, dfltDataRegConf = DataRegionConfiguration
[name = Default_Region, maxSize = 134217728, initSize = 67108864,
swapPath = null, pageEvictionMode = DISABLED, evictionThreshold = 0,9,
emptyPagesPoolSize = 100, metricsEnabled = true,
metricsSubIntervalCount = 5, metricsRateTimeInterval = 60000,
persistenceEnabled = false, checkpointPageBufSize = 0],
dataRegions = [DataRegionConfiguration [name = Tiered_Region,
maxSize = 8589934592, initSize = 8589934592, swapPath = null,
pageEvictionMode = DISABLED, evictionThreshold = 0,9,
emptyPagesPoolSize = 100, metricsEnabled = true,
metricsSubIntervalCount = 5, metricsRateTimeInterval = 60000,
persistenceEnabled = true, checkpointPageBufSize = 0]],
storagePath = / data / ignite / persistentStore, checkpointFreq = 180000,
lockWaitTime = 30000, checkpointThreads = 8,
checkpointWriteOrder = SEQUENTIAL, walHistSize = 20,
maxWalArchiveSize = 1073741824, walSegments = 10, walSegmentSize = 67108864,
walPath = db / wal, walArchivePath = db / wal / archive, metricsEnabled = false,
walMode = LOG_ONLY, walTlbSize = 131072, walBuffSize = 0, walFlushFreq = 2000,
walFsyncDelay = 1000, walRecordIterBuffSize = 67108864,
alwaysWriteFullPages = ложный,
fileIOFactory=org.apache.ignite.internal.processors.cache.persistence.file.AsyncFileIOFactory@2fb68ec6,
metricsSubIntervalCnt = 5, metricsRateTimeInterval = 60000,
walAutoArchiveAfterInactivity = -1, writeThrottlingEnabled = true,
walCompactionEnabled = false, walCompactionLevel = 1,checkpointReadLockTimeout = null], activeOnStart = true,
autoActivation = true, longQryWarnTimeout = 3000, sqlConnCfg = null,
cliConnCfg = ClientConnectorConfiguration [host = null, port = 10800,
portRange = 100, sockSndBufSize = 0, sockRcvBufSize = 0, tcpNoDelay = true,
maxOpenCursorsPerConn = 128, threadPoolSize = 8, idleTimeout = 0,
jdbcEnabled = true, odbcEnabled = true, thinCliEnabled = true,
sslEnabled = false, useIgniteSslCtxFactory = true, sslClientAuth = false,
sslCtxFactory = null], mvccVacuumThreadCnt = 2, mvccVacuumFreq = 5000,
authEnabled = false, faultHnd = null, commFailureRslvr = null],
igniteInstanceName = null, startTime = 1558132126418,
rsrcCtx=org.apache.ignite.internal.processors.resource.GridSpringResourceContextImpl@556d0e12,
reconnectState = ReconnectState [firstReconnectFut = GridFutureAdapter
[ignoreInterrupts = false, состояние = INIT, res = ноль, хэш = 1426466647],
curReconnectFut = null, reconnectDone = null]]