Skip to content

Commit 6a062b4

Browse files
committed
提交博客文件
1 parent 58926f2 commit 6a062b4

21 files changed

Lines changed: 1047 additions & 4 deletions

CNAME

Whitespace-only changes.

README.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +0,0 @@
1-
callback.github.com
2-
===================
3-
4-
My blog

_config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
markdown: rdiscount
2+
pygments: true

_layouts/default.html

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<!DOCTYPE html>
2+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
3+
<head>
4+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
5+
<title>{{ page.title }}</title>
6+
<link rel="shortcut icon" href="favicon.ico">
7+
<meta name="author" content="wangaichao" />
8+
<link href="http://feeds.feedburner.com/tom-preston-werner" rel="alternate" title="Tom Preston-Werner" type="application/atom+xml" />
9+
10+
<!-- syntax highlighting CSS -->
11+
<link rel="stylesheet" href="/css/syntax.css" type="text/css" />
12+
13+
<!-- Homepage CSS -->
14+
<link rel="stylesheet" href="/css/screen.css" type="text/css" media="screen, projection" />
15+
16+
<!-- Typekit -->
17+
<script type="text/javascript" src="http://use.typekit.com/jpd0pfm.js"></script>
18+
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
19+
</head>
20+
<body>
21+
22+
<!-- ClickTale Top part -->
23+
<script type="text/javascript">
24+
var WRInitTime=(new Date()).getTime();
25+
</script>
26+
<!-- ClickTale end of Top part -->
27+
28+
<div class="site">
29+
<div class="title">
30+
<a href="/">王爱超</a>
31+
<a class="extra" href="/">home</a>
32+
</div>
33+
34+
{{ content }}
35+
36+
<div class="footer">
37+
<!--
38+
<div class="contact">
39+
<p>
40+
Tom Preston-Werner<br />
41+
wangaichao_1988@163.com
42+
</p>
43+
</div>
44+
<div class="contact">
45+
<p>
46+
< a href="http://github.com/mojombo/">github.com/supercode</a><br />
47+
<a href="http://flickr.com/photos/mojombo/">flickr.com/photos/mojombo</a>
48+
</p>
49+
</div>
50+
<div class="rss">
51+
<a href="http://feeds.feedburner.com/tom-preston-werner">
52+
<img src="/images/rss.png" alt="Subscribe to RSS Feed" />
53+
</a>
54+
</div>
55+
-->
56+
</div>
57+
</div>
58+
59+
60+
<!-- ClickTale Bottom part -->
61+
<div id="ClickTaleDiv" style="display: none;"></div>
62+
<script type="text/javascript">
63+
if(document.location.protocol!='https:')
64+
document.write(unescape("%3Cscript%20src='http://s.clicktale.net/WRb.js'%20type='text/javascript'%3E%3C/script%3E"));
65+
</script>
66+
<script type="text/javascript">
67+
if(typeof ClickTale=='function') ClickTale(206,0.3,"www03");
68+
</script>
69+
<!-- ClickTale end of Bottom part -->
70+
71+
<!-- Google Analytics -->
72+
<script type="text/javascript">
73+
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
74+
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
75+
</script>
76+
<script type="text/javascript">
77+
var pageTracker = _gat._getTracker("UA-6016902-1");
78+
pageTracker._trackPageview();
79+
</script>
80+
<!-- Google Analytics end -->
81+
82+
</body>
83+
</html>

_layouts/post.html

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
layout: default
3+
---
4+
<div id="post">
5+
{{ content }}
6+
</div>
7+
8+
<div id="related">
9+
<h2>Related Posts</h2>
10+
<ul class="posts">
11+
{% for post in site.related_posts limit:3 %}
12+
<li><span>{{ post.date | date_to_string }}</span> &raquo; <a href="{{ post.url }}">{{ post.title }}</a></li>
13+
{% endfor %}
14+
</ul>
15+
</div>

_posts/2013-03-20-memory-over.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
layout: post
3+
title: 记对一次内存泄露的调试
4+
---
5+
6+
##{{ page.title }}
7+
8+
###1. 内存泄露的发现
9+
> 最开始发现内存泄露是程序在运行了两个多小时后就段错误然后down掉了。于是把程序编译了个debug版本,用gdb去跑,不到两个小时又down掉了。查看程序停下来的地方,发现是在对刚刚申请完的内存进行赋值时出了问题,打印一看,申请后的内存指针是空,应该是申请内存失败了,又没有加相应的判断。再去用top一看程序内存使用情况,占了70%多,而最开始的时候差不多只占用4%左右。看来是程序内有内存泄露了。
10+
11+
###2. 内存泄露的排查
12+
> 在开始进行内存泄露排查的时候,我直接就去看自己最怀疑的一个模块,结果在给这个可以 模块加入成对的内存使用记录之后,发现确实有内存对不上的地方,老是有好多内存没有 释放。接着就开始了混天暗地的读代码,测试代码阶段,搞了半天,突然发现在判断内存是否释放完成的时候有不准确的现象。虽然每次的输入都一样,但是每次不能匹配上的内存释放记录却不同。再回过头来看,发现是程序还没有运行完成早成了这个情况。于是再次回头解决如何界定程序运行完成的问题,在解决它的时候又发现了程序一个有关超时的bug,至此不匹配的内存释放发记录就稳定了。这时候内存泄露的排查已经过了两天了,自己觉得有点hold不住了,于是开始重新思考如何进行内存泄露的排查,找了张纸,列了下:
13+
>>* 先梳理整个程序,程序不算太大,可以将每个使用内存的地方都列出来
14+
>>* 统一测试时的输入,保证每次测试的输入数据都相同
15+
>>* 分模块进行测试,从数据流开始的模块挨个进行排查
16+
17+
> 之后变按照上面的顺序再次进行测试,发现自己忘记了程序中还有内存池这回事,于是件内存池临时去掉进行测试,最终找到了泄露的部分。而这个泄露的部分还不在最可疑的那个模块里面。oh,what a fucking day!
18+
19+
###3. 内存泄露的排查工具
20+
> 在做内存泄露排查的时候还用到了Valgrind这个内存检查软件,给自己帮了很大的忙
21+
> [Valgrind的使用方式](http://www.cnblogs.com/napoleon_liu/articles/2001802.html)

_site/2013/03/20/memory-over.html

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
<!DOCTYPE html>
2+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
3+
<head>
4+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
5+
<title>记对一次内存泄露的调试</title>
6+
<link rel="shortcut icon" href="favicon.ico">
7+
<meta name="author" content="wangaichao" />
8+
<link href="http://feeds.feedburner.com/tom-preston-werner" rel="alternate" title="Tom Preston-Werner" type="application/atom+xml" />
9+
10+
<!-- syntax highlighting CSS -->
11+
<link rel="stylesheet" href="/css/syntax.css" type="text/css" />
12+
13+
<!-- Homepage CSS -->
14+
<link rel="stylesheet" href="/css/screen.css" type="text/css" media="screen, projection" />
15+
16+
<!-- Typekit -->
17+
<script type="text/javascript" src="http://use.typekit.com/jpd0pfm.js"></script>
18+
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
19+
</head>
20+
<body>
21+
22+
<!-- ClickTale Top part -->
23+
<script type="text/javascript">
24+
var WRInitTime=(new Date()).getTime();
25+
</script>
26+
<!-- ClickTale end of Top part -->
27+
28+
<div class="site">
29+
<div class="title">
30+
<a href="/">王爱超</a>
31+
<a class="extra" href="/">home</a>
32+
</div>
33+
34+
<div id="post">
35+
<h2>记对一次内存泄露的调试</h2>
36+
37+
<h3>1. 内存泄露的发现</h3>
38+
39+
<blockquote><p>最开始发现内存泄露是程序在运行了两个多小时后就段错误然后down掉了。于是把程序编译了个debug版本,用gdb去跑,不到两个小时又down掉了。查看程序停下来的地方,发现是在对刚刚申请完的内存进行赋值时出了问题,打印一看,申请后的内存指针是空,应该是申请内存失败了,又没有加相应的判断。再去用top一看程序内存使用情况,占了70%多,而最开始的时候差不多只占用4%左右。看来是程序内有内存泄露了。</p></blockquote>
40+
41+
<h3>2. 内存泄露的排查</h3>
42+
43+
<blockquote><p>在开始进行内存泄露排查的时候,我直接就去看自己最怀疑的一个模块,结果在给这个可以 模块加入成对的内存使用记录之后,发现确实有内存对不上的地方,老是有好多内存没有 释放。接着就开始了混天暗地的读代码,测试代码阶段,搞了半天,突然发现在判断内存是否释放完成的时候有不准确的现象。虽然每次的输入都一样,但是每次不能匹配上的内存释放记录却不同。再回过头来看,发现是程序还没有运行完成早成了这个情况。于是再次回头解决如何界定程序运行完成的问题,在解决它的时候又发现了程序一个有关超时的bug,至此不匹配的内存释放发记录就稳定了。这时候内存泄露的排查已经过了两天了,自己觉得有点hold不住了,于是开始重新思考如何进行内存泄露的排查,找了张纸,列了下:</p>
44+
45+
<blockquote><ul>
46+
<li>先梳理整个程序,程序不算太大,可以将每个使用内存的地方都列出来</li>
47+
<li>统一测试时的输入,保证每次测试的输入数据都相同</li>
48+
<li>分模块进行测试,从数据流开始的模块挨个进行排查</li>
49+
</ul>
50+
</blockquote>
51+
52+
<p>之后变按照上面的顺序再次进行测试,发现自己忘记了程序中还有内存池这回事,于是件内存池临时去掉进行测试,最终找到了泄露的部分。而这个泄露的部分还不在最可疑的那个模块里面。oh,what a fucking day!</p></blockquote>
53+
54+
<h3>3. 内存泄露的排查工具</h3>
55+
56+
<blockquote><p>在做内存泄露排查的时候还用到了Valgrind这个内存检查软件,给自己帮了很大的忙
57+
<a href="http://www.cnblogs.com/napoleon_liu/articles/2001802.html">Valgrind的使用方式</a></p></blockquote>
58+
59+
</div>
60+
61+
<div id="related">
62+
<h2>Related Posts</h2>
63+
<ul class="posts">
64+
65+
</ul>
66+
</div>
67+
68+
69+
<div class="footer">
70+
<!--
71+
<div class="contact">
72+
<p>
73+
Tom Preston-Werner<br />
74+
wangaichao_1988@163.com
75+
</p>
76+
</div>
77+
<div class="contact">
78+
<p>
79+
< a href="http://github.com/mojombo/">github.com/supercode</a><br />
80+
<a href="http://flickr.com/photos/mojombo/">flickr.com/photos/mojombo</a>
81+
</p>
82+
</div>
83+
<div class="rss">
84+
<a href="http://feeds.feedburner.com/tom-preston-werner">
85+
<img src="/images/rss.png" alt="Subscribe to RSS Feed" />
86+
</a>
87+
</div>
88+
-->
89+
</div>
90+
</div>
91+
92+
93+
<!-- ClickTale Bottom part -->
94+
<div id="ClickTaleDiv" style="display: none;"></div>
95+
<script type="text/javascript">
96+
if(document.location.protocol!='https:')
97+
document.write(unescape("%3Cscript%20src='http://s.clicktale.net/WRb.js'%20type='text/javascript'%3E%3C/script%3E"));
98+
</script>
99+
<script type="text/javascript">
100+
if(typeof ClickTale=='function') ClickTale(206,0.3,"www03");
101+
</script>
102+
<!-- ClickTale end of Bottom part -->
103+
104+
<!-- Google Analytics -->
105+
<script type="text/javascript">
106+
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
107+
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
108+
</script>
109+
<script type="text/javascript">
110+
var pageTracker = _gat._getTracker("UA-6016902-1");
111+
pageTracker._trackPageview();
112+
</script>
113+
<!-- Google Analytics end -->
114+
115+
</body>
116+
</html>

_site/CNAME

Whitespace-only changes.

_site/README.md

Whitespace-only changes.

_site/atom.xml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<feed xmlns="http://www.w3.org/2005/Atom">
3+
4+
<title>Tom Preston-Werner</title>
5+
<link href="http://tom.preston-werner.com/atom.xml" rel="self"/>
6+
<link href="http://tom.preston-werner.com/"/>
7+
<updated>2013-03-22T15:23:18+08:00</updated>
8+
<id>http://tom.preston-werner.com/</id>
9+
<author>
10+
<name>Tom Preston-Werner</name>
11+
<email>tom@mojombo.com</email>
12+
</author>
13+
14+
15+
<entry>
16+
<title>记对一次内存泄露的调试</title>
17+
<link href="http://tom.preston-werner.com/2013/03/20/memory-over.html"/>
18+
<updated>2013-03-20T00:00:00+08:00</updated>
19+
<id>http://tom.preston-werner.com/2013/03/20/memory-over</id>
20+
<content type="html">&lt;h2&gt;记对一次内存泄露的调试&lt;/h2&gt;
21+
22+
&lt;h3&gt;1. 内存泄露的发现&lt;/h3&gt;
23+
24+
&lt;blockquote&gt;&lt;p&gt;最开始发现内存泄露是程序在运行了两个多小时后就段错误然后down掉了。于是把程序编译了个debug版本,用gdb去跑,不到两个小时又down掉了。查看程序停下来的地方,发现是在对刚刚申请完的内存进行赋值时出了问题,打印一看,申请后的内存指针是空,应该是申请内存失败了,又没有加相应的判断。再去用top一看程序内存使用情况,占了70%多,而最开始的时候差不多只占用4%左右。看来是程序内有内存泄露了。&lt;/p&gt;&lt;/blockquote&gt;
25+
26+
&lt;h3&gt;2. 内存泄露的排查&lt;/h3&gt;
27+
28+
&lt;blockquote&gt;&lt;p&gt;在开始进行内存泄露排查的时候,我直接就去看自己最怀疑的一个模块,结果在给这个可以 模块加入成对的内存使用记录之后,发现确实有内存对不上的地方,老是有好多内存没有 释放。接着就开始了混天暗地的读代码,测试代码阶段,搞了半天,突然发现在判断内存是否释放完成的时候有不准确的现象。虽然每次的输入都一样,但是每次不能匹配上的内存释放记录却不同。再回过头来看,发现是程序还没有运行完成早成了这个情况。于是再次回头解决如何界定程序运行完成的问题,在解决它的时候又发现了程序一个有关超时的bug,至此不匹配的内存释放发记录就稳定了。这时候内存泄露的排查已经过了两天了,自己觉得有点hold不住了,于是开始重新思考如何进行内存泄露的排查,找了张纸,列了下:&lt;/p&gt;
29+
30+
&lt;blockquote&gt;&lt;ul&gt;
31+
&lt;li&gt;先梳理整个程序,程序不算太大,可以将每个使用内存的地方都列出来&lt;/li&gt;
32+
&lt;li&gt;统一测试时的输入,保证每次测试的输入数据都相同&lt;/li&gt;
33+
&lt;li&gt;分模块进行测试,从数据流开始的模块挨个进行排查&lt;/li&gt;
34+
&lt;/ul&gt;
35+
&lt;/blockquote&gt;
36+
37+
&lt;p&gt;之后变按照上面的顺序再次进行测试,发现自己忘记了程序中还有内存池这回事,于是件内存池临时去掉进行测试,最终找到了泄露的部分。而这个泄露的部分还不在最可疑的那个模块里面。oh,what a fucking day!&lt;/p&gt;&lt;/blockquote&gt;
38+
39+
&lt;h3&gt;3. 内存泄露的排查工具&lt;/h3&gt;
40+
41+
&lt;blockquote&gt;&lt;p&gt;在做内存泄露排查的时候还用到了Valgrind这个内存检查软件,给自己帮了很大的忙
42+
&lt;a href=&quot;http://www.cnblogs.com/napoleon_liu/articles/2001802.html&quot;&gt;Valgrind的使用方式&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
43+
</content>
44+
</entry>
45+
46+
47+
</feed>

0 commit comments

Comments
 (0)