.Net Apache Ignite内存cgroup内存不足

.Net Apache Ignite内存cgroup内存不足,.net,docker,ignite,cgroups,.net,Docker,Ignite,Cgroups,Apache Ignite内存cgroup内存不足 我有一个单独的缓存服务器程序,我使用最新版本的ApacheIgnite2.10进行了测试。我的控制台程序代码如下: using Apache.Ignite.Core.Binary; using Apache.Ignite.Core.Cache.Configuration; using Apache.Ignite.Core.Common; using Apache.Ignite.Core.Discovery.Tcp; using Apache.I

Apache Ignite内存cgroup内存不足

我有一个单独的缓存服务器程序,我使用最新版本的ApacheIgnite2.10进行了测试。我的控制台程序代码如下:

using Apache.Ignite.Core.Binary;
using Apache.Ignite.Core.Cache.Configuration;
using Apache.Ignite.Core.Common;
using Apache.Ignite.Core.Discovery.Tcp;
using Apache.Ignite.Core.Discovery.Tcp.Static;
using Apache.Ignite.Core.Failure;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace IgniteConsoleApp
{
    class Program
    {

        protected Program()
        {

        }

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var ignite = StartIgnite();
            Console.WriteLine("StartIgnite Sucess!");
            CacheConfiguration config = new CacheConfiguration($"Test{typeof(VehicleModel).FullName}");
            var cache = ignite.GetOrCreateCache<string, VehicleModel>(config);
            var list = GetVehicleModels().ToDictionary(x => x.Id.ToString(), x => x);

            cache.PutAll(list);

            Console.WriteLine("loop start");
            for (int j = 0; j < int.MaxValue; j++)
            {
                for (var i = 1; i <= 2500; i++)
                {
                    var data = cache.AsQueryable().FirstOrDefault(x => x.Value.DumFleetNum == i.ToString());
                }
            }

            Console.ReadLine();
        }

        private static List<VehicleModel> GetVehicleModels()
        {
            var list = new List<VehicleModel>();
            for (var i = 1; i <= 2500; i++)
            {
                list.Add(new VehicleModel
                {
                    Id = i,
                    Version = 0,
                    CacheUpdateDT = DateTime.UtcNow,
                    DumFleetNum = i.ToString(),
                    VehicleID = i.ToString(),
                    FleetNumber = i.ToString(),
                    RadioAlias = i.ToString(),
                });
            }
            return list;
        }

        private static readonly IList<string> JvmOpts = new List<string>{
                    "-Duser.timezone=UTC",
                    "-Djava.net.preferIPv4Stack=true"
        };

        private static IIgnite StartIgnite()
        {
            var igniteInstance = Ignition.TryGetIgnite();
            if (igniteInstance == null)
            {
                try
                {
                    var igniteHome = IgniteHome.GetIgniteHome();
                    var workDir = Path.Combine(igniteHome, "work");
                    var cfg = new IgniteConfiguration
                    {
                        BinaryConfiguration = new BinaryConfiguration
                        {
                            Serializer = new BinaryReflectiveSerializer
                            {
                                ForceTimestamp = true
                            }
                        },
                        DiscoverySpi = new TcpDiscoverySpi
                        {
                            IpFinder = new TcpDiscoveryStaticIpFinder
                            {
                                Endpoints = new[] { "192.168.6.126:47500" }
                            },
                            SocketTimeout = TimeSpan.FromSeconds(5),
                            JoinTimeout = TimeSpan.FromSeconds(3),
                            NetworkTimeout = TimeSpan.FromSeconds(3),
                            LocalAddress = "192.168.6.126",
                        },
                        ClientMode = true,
                        AutoGenerateIgniteInstanceName = true,
                        FailureHandler = new StopNodeFailureHandler(),
                        Localhost = "192.168.6.126",
                        IgniteHome = igniteHome,
                        WorkDirectory = workDir,
                        JvmInitialMemoryMb = 1024,
                        JvmMaxMemoryMb = 2048,
                        JvmOptions = JvmOpts
                    };
                    igniteInstance = Ignition.Start(cfg);
                    if (!igniteInstance.GetCluster().IsActive())
                    {
                        igniteInstance.GetCluster().SetActive(true);
                    }
                    //启用自动基线调整
                    igniteInstance.GetCluster().SetBaselineAutoAdjustEnabledFlag(true);
                    igniteInstance.GetCluster().SetBaselineAutoAdjustTimeout(30000);
                }
                catch (IgniteException ex)
                {
                    throw new IgniteException(ex.Message);
                }
                catch (Exception ex)
                {
                    throw;
                }
            }
            return igniteInstance;
        }

        public class VehicleModel
        {
            [QuerySqlField(IsIndexed = true)]
            public long Id { get; set; }

            [QuerySqlField(IsIndexed = true)]
            public long Version { get; set; }

            [QuerySqlField(IsIndexed = true)]
            public DateTime CacheUpdateDT { get; set; }

            /// <summary>
            /// Vehicle 唯一标识
            /// </summary>
            [QuerySqlField(IsIndexed = true)]
            public string DumFleetNum { get; set; }
            /// <summary>
            /// VehicleID
            /// </summary>
            [QuerySqlField]
            public string VehicleID { get; set; }
            /// <summary>
            /// Fleet Number 车牌号
            /// </summary>
            [QuerySqlField]
            public string FleetNumber { get; set; }
            /// <summary>
            /// Vehicle Photo ID
            /// </summary>
            public long RMSFileID { get; set; }
            /// <summary>
            /// Vehicle Type Id 车辆类型ID
            /// </summary>
            [QuerySqlField]
            public long VehicleTypeID { get; set; }
            [QuerySqlField]
            public string VehicleTypeName { get; set; }
            /// <summary>
            /// Location Code
            /// </summary>
            public string LocationCode { get; set; }
            /// <summary>
            /// Station Code 消防站/救护站ID
            /// </summary>
            [QuerySqlField]
            public string StationCode { get; set; }
            /// <summary>
            /// Registration number 注册码
            /// </summary>
            public string RegistrationNumber { get; set; }
            /// <summary>
            /// Inventory Owner
            /// </summary>
            public string InventoryOwner { get; set; }
            /// <summary>
            /// ValidFlag 开始结束日期是否合法
            /// </summary>
            public bool? ValidFlag { get; set; }
            /// <summary>
            /// Telephone Number 移动电话号码
            /// </summary>
            public string TelephoneNumber { get; set; }
            /// <summary>
            /// Pager 寻呼机号码
            /// </summary>
            public string PagerNumber { get; set; }
            /// <summary>
            /// Dimensions Unit 长/宽/高单位
            /// </summary>
            public string DimensionsUnit { get; set; }
            /// <summary>
            /// Station Code(车辆归属Station)
            /// </summary>
            public string ResourceParentCode { get; set; }
            /// <summary>
            /// Effective Start Date 生效开始日期
            /// </summary>
            public DateTime? EffectiveStartDate { get; set; }
            /// <summary>
            /// Effective End Date 生效结束日期
            /// </summary>
            public DateTime? EffectiveEndDate { get; set; }
            /// <summary>
            /// English Description 英文描述
            /// </summary>
            public string EnglishDescription { get; set; }
            /// <summary>
            /// Chinese Description 中文描述
            /// </summary>
            public string ChineseDescription { get; set; }
            /// <summary>
            /// Width 宽度
            /// </summary>
            public decimal? Width { get; set; }
            /// <summary>
            /// Height 高度
            /// </summary>
            public decimal? Height { get; set; }
            /// <summary>
            /// Length 长度
            /// </summary>
            public decimal? Length { get; set; }
            /// <summary>
            /// Max Speed 最大速度
            /// </summary>
            public int? MaxSpeed { get; set; }
            /// <summary>
            /// Max Seat 最大座位数
            /// </summary>
            public int? MaxSeat { get; set; }
            /// <summary>
            /// Talk Group 讨论组
            /// </summary>
            public string TalkGroup { get; set; }
            /// <summary>
            /// Tag ID
            /// </summary>
            public string TagID { get; set; }
            /// <summary>
            /// Remark 备注
            /// </summary>
            public string Remark { get; set; }
            /// <summary>
            /// 移动电话号码
            /// </summary>
            public string TelephoneNumber2 { get; set; }
            /// <summary>
            /// 移动电话号码
            /// </summary>
            public string TelephoneNumber3 { get; set; }
            /// <summary>
            /// 是否选择Pager方式(Y;N;NULL)
            /// </summary>
            public string MOCFlagPager { get; set; }
            /// <summary>
            /// 是否选择Telephone方式(Y;N;NULL)
            /// </summary>
            public string MOCFlagTelephone { get; set; }
            /// <summary>
            /// 是否选择MDT方式(Y;N;NULL)
            /// </summary>
            public string MOCFlagMDT { get; set; }
            /// <summary>
            /// 是否选择ACOS方式(Y;N;NULL)
            /// </summary>
            public string MOCFlagACOS { get; set; }
            /// <summary>
            /// 是否选择TalkGroup方式(Y;N;NULL)
            /// </summary>
            public string MOCFlagTalkGroup { get; set; }
            /// <summary>
            /// Radio Alias
            /// </summary>
            [QuerySqlField]
            public string RadioAlias { get; set; }
            /// <summary>
            /// ISSI (Mobile)
            /// </summary>
            [QuerySqlField]
            public string IssiCode { get; set; }
            /// <summary>
            /// PD 1
            /// </summary>
            [QuerySqlField]
            public string PortableDevice1 { get; set; }
            /// <summary>
            /// PD 2
            /// </summary>
            [QuerySqlField]
            public string PortableDevice2 { get; set; }
            /// <summary>
            /// PD 3
            /// </summary>
            [QuerySqlField]
            public string PortableDevice3 { get; set; }
            /// <summary>
            /// PD 4
            /// </summary>
            [QuerySqlField]
            public string PortableDevice4 { get; set; }
            /// <summary>
            /// PD 5
            /// </summary>
            [QuerySqlField]
            public string PortableDevice5 { get; set; }
            /// <summary>
            /// Current MOC 当前选择MOC
            /// </summary>
            public string MeansOfContact { get; set; }
        }

    }
}```
I run the console program code in docker. After running for more than 12 hours, docker will exit automatically. I check the system log, error message:```Apr 06 04:51:42 photon-f1d7081b1f40 kernel: Memory cgroup out of memory: Kill process 23767 (dotnet) score 1012 or sacrifice child
Apr 06 04:51:42 photon-f1d7081b1f40 kernel: Killed process 23767 (dotnet) total-vm:16079100kB, anon-rss:2073412kB, file-rss:45752kB, shmem-rss:0kB
使用Apache.Ignite.Core.Binary;
使用Apache.Ignite.Core.Cache.Configuration;
使用Apache.Ignite.Core.Common;
使用Apache.Ignite.Core.Discovery.Tcp;
使用Apache.Ignite.Core.Discovery.Tcp.Static;
使用Apache.Ignite.Core.Failure;
使用制度;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
名称空间控制台EAPP
{
班级计划
{
受保护程序()
{
}
静态void Main(字符串[]参数)
{
控制台。WriteLine(“你好,世界!”);
var ignite=星型花岗岩();
Console.WriteLine(“StartIgnite Success!”);
CacheConfiguration config=新的CacheConfiguration($“Test{typeof(VehicleModel.FullName}”);
var cache=ignite.GetOrCreateCache(配置);
var list=GetVehicleModels().ToDictionary(x=>x.Id.ToString(),x=>x);
cache.PutAll(列表);
控制台写入线(“循环启动”);
对于(int j=0;j
方法,内存使用量一直在增加。 内存监控工具的结果如图所示。

JVM堆+Apache Ignite数据区域和检查点页面缓冲区+JVM开销+.NET堆+.NET开销总和应小于Docker根据其cGroup或物理RAM可用性分配的内存量


很难说应用程序或Apache Ignite端是否存在任何问题,因为OOMKiller操作表明存在配置问题。

配置问题是指igniteconfiguration?还是docker run命令。这两者之间不匹配。您好,您能给我举个例子吗?请检查