.Net Apache Ignite内存cgroup内存不足
Apache Ignite内存cgroup内存不足 我有一个单独的缓存服务器程序,我使用最新版本的ApacheIgnite2.10进行了测试。我的控制台程序代码如下:.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
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命令。这两者之间不匹配。您好,您能给我举个例子吗?请检查