系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败,这就是典型的内存泄漏问题。这类问题通常难以预测,也很难通过静态代码梳理的方式定位。Heap Profiling 就是帮助我们解决此类问题的。
TiKV 作为分布式系统的一部分,已经初步拥有了 Heap Profiling 的能力。本文将介绍一些常见的 Heap Profiler 的实现原理及使用方法,帮助读者更容易地理解 TiKV 中相关实现,或将这类分析手段更好地运用到自己项目中。
情况:
interface IAnimal
{
}
class Dog : IAnimal
{
}
以下内容将不进行汇编:
Tuple<IAnimal> myWeirdTuple;
myWeirdTuple = Tuple.Create(new Dog());
必须在CREATE方法中指定type参数,如下所示:
myWeirdTuple = Tuple.Create<IAnimal>(new Dog());
Tuple.Create()
重载方法都只是一堆调用您发布的第一个版本的静态方法:
public static class Tuple
{
public static Tuple<T1> Create<T1>(T1 item1) {
return new Tuple<T1>(item1);
}
public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) {
return new Tuple<T1, T2>(item1, item2);
}
public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3) {
return new Tuple<T1, T2, T3>(item1, item2, item3);
}
...
类型Tuple.Create
:
public class Person
{
public string Name { get; set; }
public int Height { get; set; }
public DateTime BirthDate { get; set; }
}
var people = new List<Person>
{
new Person { Name = "Bob", Height = 72, BirthDate = new DateTime(1984,1,1) },
new Person { Name = "Mary", Height = 64, BirthDate = new DateTime(1980,2,2) }
};
var oneAnonList = people.Select(x => new { x.Name, x.BirthDate });
var twoAnonList = people.Select(x => new { x.Height, x.Name });
var myTuple = Tuple.Create(oneAnonList, twoAnonList);
相似问题