最近在测试过程中,发现在做map reduce数据分析的过程中,cpu sys部分会偶然的升到,甚至到达50%,抖动的比较厉害。
节点的磁盘的IO吞吐量比较大,每秒达到150M,大部分是tasktracker读取本地节点DFS的数据,默认情况下,读取数据是系统调用每次从硬盘上读取4K大小的数据到内核空间中,后由内核copy到应用程序空间,是什么导致内核部分消耗大部分的时间。
经过大量的各方面的监控,发现CPU sys突然升到的时机大部分发生在文件系统cache释放内存的时,非常既有规律性,特别是在操作系统的可用内存比较紧张时特别明显,
因此推断是文件系统cache释放部分空间时候需要内核做复杂的收集算法,把一些不常用的页面交换到硬盘上,又因MapReduce的过程是大量的顺序IO,因此对文件系统的cache消耗的特别厉害,cache的空间释放也比较频繁。后把vm的cache drop的情况下,mapreduce运算过程中,cache一直在增加无cache交换方式,CPU sys消耗很小并且稳定,进一步的验证了这个问题。
后续对文件系统cache部分进行优化。