<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>-Flyぁ梦- &#187; 内存</title>
	<atom:link href="http://blog.11034.org/tag/%e5%86%85%e5%ad%98/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.11034.org</link>
	<description></description>
	<lastBuildDate>Sun, 22 Jun 2025 08:59:05 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>64位Linux下Java进程堆外内存迷之64M问题</title>
		<link>http://blog.11034.org/2016-09/64bits_linux_arena_memory.html</link>
		<comments>http://blog.11034.org/2016-09/64bits_linux_arena_memory.html#comments</comments>
		<pubDate>Fri, 09 Sep 2016 10:44:42 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[内存]]></category>
		<category><![CDATA[内存泄露]]></category>

		<guid isPermaLink="false">http://blog.11034.org/?p=2870</guid>
		<description><![CDATA[起因，监控系统检查到link机器内存耗尽，用top查看，果然有一个java进程占用了近24g内存（包括VIRT [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>起因，监控系统检查到link机器内存耗尽，用top查看，果然有一个java进程占用了近24g内存（包括VIRT和RES），但是启动java进程的参数是java -server -Xmx12g -Xms12g -XX:PermSize=50m，理论上只应该占用12g再多一些，所以问题就在这个进程了。此进程主要处理Socket IO读写，使用的是Java NIO。</p>
<p><span id="more-2870"></span></p>
<p><a href="http://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used" target="_blank">http://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used</a> 这里详细描述了top命令里内存显示的意义。</p>
<p>用jstat -gcutil $pid看，发现堆使用率却很低，甚至都没有怎么出现过Full GC，Young GC也很少，堆内存完全够用。<code class="markdown_inline_code">jmap -histo:live  $pid命令（注：此命令调用会先调用Full GC一次）</code>也看不出有任何对象占用内存很大的情况。</p>
<p>到这里据同事提醒，怀疑是堆外内存泄露。一般情况下是<code class="markdown_inline_code">ByteBuffer.allocateDirect()</code>这个API可以开辟堆外内存空间，但是搜索源代码并没有发现有这个调用。</p>
<p>然后据水寒同学提示，可以通过<code class="markdown_inline_code">cat /proc/$pid/maps</code>（也可以通过<code class="markdown_inline_code">pmap $pid</code>命令）来查看内存使用。然后就发现了问题：</p>
<ul>
<li>一大块内存正好是12g，应该就是通过-Xmx设置的内存，无标识符</li>
<li>有一块3.5g的内存，最后一列标识符是[heap]</li>
<li>有111块正好为64M或者非常接近64M的内存块，无标识符</li>
</ul>
<p>显然问题出在这111 * 64m = 6g这里，搜索源代码并没有发现有常量64的使用，一般代码也不会硬coding这么大一块内存呀。如果问题出在引用的某个第三方jar包就难定位问题了。</p>
<p>因为觉得这个64M内存块具有非常显著的特点，于是就通过Google和百度，找到如下：</p>
<pre class="markdown_pre"><code><a href="http://blog.2baxb.me/archives/918" target="_blank">http://blog.2baxb.me/archives/918</a>

<a href="https://www.ibm.com/developerworks/community/blogs/kevgrig/entry/linux_glibc_2_10_rhel_6_malloc_may_show_excessive_virtual_memory_usage" target="_blank">https://www.ibm.com/developerworks/community/blogs/kevgrig/entry/linux_glibc_2_10_rhel_6_malloc_may_show_excessive_virtual_memory_usage</a>

<a href="http://it.taocms.org/01/6808.htm" target="_blank">http://it.taocms.org/01/6808.htm</a>

<a href="https://infobright.com/blog/malloc_arena_max/" target="_blank">https://infobright.com/blog/malloc_arena_max/</a>

这几篇文章，尤其是ibm那篇文章讲的最细致，Linux glibc &gt;= 2.10 (RHEL 6) malloc may show excessive virtual memory usage。

大致意思是，这个版本的glibc控制的malloc函数，会在64位的Linux的中，给每一个CPU核开辟8个64M内存的缓冲区，用于提高性能。

然后这个问题也被Hadoop官方发现并指出，然后推荐控制环境变量MALLOC_ARENA_MAX=4来达到最优设置。

修改方法：启动java进程脚本前面加入，export MALLOC_ARENA_MAX=4</code></pre>
<h4  class="related_post_title">看看 linux , 内存 , 内存泄露</h4><ul class="related_post"><li>2015-08-28 -- <a target="_blank" href="http://blog.11034.org/2015-08/tomcat_linux.html" title="Linux下搭建Tomcat环境">Linux下搭建Tomcat环境</a></li><li>2015-08-12 -- <a target="_blank" href="http://blog.11034.org/2015-08/rails_nginx.html" title="Liunx下搭建Rails和Nginx环境">Liunx下搭建Rails和Nginx环境</a></li><li>2013-05-15 -- <a target="_blank" href="http://blog.11034.org/2013-05/fan_error.html" title="小黑风扇坏两天，被逼看完一本书">小黑风扇坏两天，被逼看完一本书</a></li></ul><h4 class="related_post_title">看看 Java </h4><ul class="related_post"><li>2016-08-18 -- <a target="_blank" href="http://blog.11034.org/2016-08/java_concurrency_in_practice.html" title="读java concurrency in practice">读java concurrency in practice</a></li><li>2016-08-05 -- <a target="_blank" href="http://blog.11034.org/2016-08/thread_stop.html" title="线程清理">线程清理</a></li><li>2016-06-21 -- <a target="_blank" href="http://blog.11034.org/2016-06/futuretask.html" title="FutureTask简单分析和用法">FutureTask简单分析和用法</a></li><li>2016-06-21 -- <a target="_blank" href="http://blog.11034.org/2016-06/semaphore.html" title="Semaphore简单分析">Semaphore简单分析</a></li><li>2016-06-17 -- <a target="_blank" href="http://blog.11034.org/2016-06/countdownlatch.html" title="CountDownLatch简单分析">CountDownLatch简单分析</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2016-09/64bits_linux_arena_memory.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>小黑风扇坏两天，被逼看完一本书</title>
		<link>http://blog.11034.org/2013-05/fan_error.html</link>
		<comments>http://blog.11034.org/2013-05/fan_error.html#comments</comments>
		<pubDate>Wed, 15 May 2013 11:15:15 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Life in ZJU]]></category>
		<category><![CDATA[thinkpad]]></category>
		<category><![CDATA[内存]]></category>
		<category><![CDATA[维修]]></category>
		<category><![CDATA[风扇]]></category>

		<guid isPermaLink="false">http://blog.stariy.org/?p=1795</guid>
		<description><![CDATA[大概两周前，周末在家一次玩dota的时候，电脑突然变卡然后自动关机，整个机器很烫，再开机黑屏显示FAN ERO [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>大概两周前，周末在家一次玩dota的时候，电脑突然变卡然后自动关机，整个机器很烫，再开机黑屏显示FAN ERORR又自动关机，吓坏了赶紧让其温度冷却下来再开机倒又开起来了。知道是风扇出问题后，之后因为一直还能用也就懒得换，打游戏的时候特别小心调低CPU性能和屏幕亮度，但是CPU温度还是会飙到80°，很恐怖  [em82]。</p>
<p>然后直到上周六晚上也在打dota，温度也一直飙高，游戏也卡了，吓得直接退出游戏，然后第二天就再也开不了机了，每次都是FAN ERROR。<span id="more-1795"></span></p>
<p>无奈周一拿到百脑汇去修，试了下风扇清灰也没用，只能换扇芯还没货要预订，被告知电脑先留着第二天来取吧，这样就要荒废一天了T_T。这时也没多想，主要这家维修点是我第二次来修小黑了，上次换了个屏幕感觉还行，没想太多就留着小黑自己回了，埋下伏笔&#8230;</p>
<p>周二下午收到短信说修好了，扇芯一换果然就好了，只是开机进去比较奇怪的分辨率变成了800*600，发现是显卡驱动没了，直到重装了联想的显卡驱动系统才正常。然后又要求加一条2G DDR3 1066M的内存，记得说是弄一条三星的，回来硬件一查看发现是尔必达的。今天和维修人员联系，他表示也不知道尔必达说给我装的是金士顿，这个&#8230;然后今天又发现BIOS某些改过的设置不见了，因为触摸板又被启用了。</p>
<p>换了T400的扇芯130块钱，看淘宝虽然扇芯价格还挺便宜大概50-60，不过良莠不齐，再算上拆机费清灰之类的，也算还行了。主要之前网上有百度过看到换个风扇百来块钱，于是也没想太多。</p>
<p>尔必达的2G内存140块钱，感觉有点贵，而且没有被告知内存牌子有点被坑的感觉。</p>
<p>钱的问题倒不大，一直觉得这维修小哥还挺不错的270块钱直接付了都没有还价。就是昨天因为驱动的事情有怀疑到是否显卡被替换了，虽然觉得自己的T400都已经3年半快了，这不算好的显卡还值得被偷换么？后来百度了好久，一来了解到驱动掉了很可能是因为之前那次打游戏机器热坏了高温使得显卡工作不稳定，这种情况下驱动就很容易掉，倒似乎符合，还有就是笔记本的显卡是直接焊接在主板上的真要替换要花费很大的工作量不值得，而且查过了主版应该是原来的。BIOS也有可能是同样原因然后初始化成原值了。</p>
<p>这样想来自己很大一部分负面情绪可能是冤枉维修小哥了，那也算是自己幸运吧没有碰到坏事，虽然内存还是有点纠结。</p>
<h2>教训</h2>
<ol>
<li>维修前，用鲁大师等硬件软件记录导出所有硬件信息序列号等备份</li>
<li>维修时一时搞不定，特别是这种只是等硬件才能修的情况，应该叫维修人员装好机器果断拿走货到了再拆装，即便多付点钱。一则放心硬件安全，二则放心硬盘内资料安全（你懂的）</li>
<li>换硬件，淘宝知硬件大致价格，有心理准备并好杀价</li>
<li>熟客因为信任，有时候反而容易被宰；虽然商家不一定是坏的，但你先入为主地觉得人家在坑你然后处处小心提防总是没错的</li>
<li>当然，也不要因为十几块钱几十块钱太和商家争便宜，人家也是辛苦干活的工钱，质量保证地修好了才是真的好！</li>
</ol>
<h2>收获</h2>
<p>周一下午、晚上和周二早上，因为没有电脑啥也干不了，只能看书，正好手头有一本4月底某个“特殊而有纪念意义的日子”从zjg图书馆借来的一本《How tomcat works》译本，欢快地居然差不多看完了，效率奇高 。</p>
<p>[em75]</p>
<p>可见有电脑在的时候，微博、cc98、QQ、新闻、博客等等，实在是太浪费时间了啊！</p>
<h4  class="related_post_title">看看 thinkpad , 内存 , 维修 , 风扇</h4><ul class="related_post"><li>2016-09-09 -- <a target="_blank" href="http://blog.11034.org/2016-09/64bits_linux_arena_memory.html" title="64位Linux下Java进程堆外内存迷之64M问题">64位Linux下Java进程堆外内存迷之64M问题</a></li><li>2011-11-16 -- <a target="_blank" href="http://blog.11034.org/2011-11/thinkpad_t400_repair.html" title="小黑维修记，黑色神棍节">小黑维修记，黑色神棍节</a></li></ul><h4 class="related_post_title">看看 Life in ZJU </h4><ul class="related_post"><li>2015-05-21 -- <a target="_blank" href="http://blog.11034.org/2015-05/yixing.html" title="2015浙大春季毅行，事迹达成">2015浙大春季毅行，事迹达成</a></li><li>2013-04-29 -- <a target="_blank" href="http://blog.11034.org/2013-04/lukao.html" title="路考过了，庆贺下">路考过了，庆贺下</a></li><li>2013-04-19 -- <a target="_blank" href="http://blog.11034.org/2013-04/system_reinstall.html" title="再也不说会重装系统了>_<">再也不说会重装系统了>_<</a></li><li>2013-02-14 -- <a target="_blank" href="http://blog.11034.org/2013-02/wp_zjuem_in_wordpress.html" title="wp-zjuem，zju cc98表情系统 in wordpress">wp-zjuem，zju cc98表情系统 in wordpress</a></li><li>2013-01-25 -- <a target="_blank" href="http://blog.11034.org/2013-01/winter_holiday_plan.html" title="zoj 200AC，寒假计划">zoj 200AC，寒假计划</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2013-05/fan_error.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
