1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<code>我的部落格已遷移到xdoujiang.com請去那邊和我交流</code>
<code>一、基礎環境</code>
<code>1、發行版本</code>
<code>uname</code> <code>-a</code>
<code>Linux 10.1.10.117 3.2.0-4-amd64 </code><code>#1 SMP Debian 3.2.68-1+deb7u1 x86_64 GNU/Linux</code>
<code>2、安裝apache2</code>
<code>apt-get -y </code><code>install</code> <code>apache2-mpm-prefork</code>
<code>3、建立目錄和賦予權限</code>
<code>mkdir</code> <code>/opt/game/core</code> <code>-p</code>
<code>chown</code> <code>www-data </code><code>/opt/game/core/</code> <code>-R</code>
<code>二、打開core dump功能</code>
<code>1、檢視core dump是否打開</code>
<code>ulimit</code> <code>-c</code>
<code>0</code>
<code>ulimit</code> <code>-a</code>
<code>core </code><code>file</code> <code>size (blocks, -c) 0</code>
<code>參數說明</code>
<code>-c 表示核心轉儲檔案的大小限制 零表示未打開core dump功能 設定core檔案的最大值 機關為區塊。 </code>
<code>-a 顯示目前所有的資源限制</code>
<code>2、修改配置(機關KB)</code>
<code>cat</code> <code>/etc/security/limits</code><code>.conf</code>
<code>* soft core 2048000</code>
<code>* hard core 2048000</code>
<code>3、生效</code>
<code>ulimit</code> <code>-c 2048000</code>
<code>4、檢查</code>
<code>core </code><code>file</code> <code>size (blocks, -c) 2048000</code>
<code>2048000</code>
<code>二、修改core檔案儲存的路徑</code>
<code>1、臨時修改</code>
<code>1)core檔案儲存在</code><code>/opt/game/core</code><code>目錄下</code>
<code>echo</code> <code>"/opt/game/core/%e.core.%s.%p.%h.%t"</code> <code>> </code><code>/proc/sys/kernel/core_pattern</code>
<code>2)生成的core檔案名将會變成core.pid</code>
<code>echo</code> <code>1 > </code><code>/proc/sys/kernel/core_uses_pid</code>
<code>2、永久修改 </code>
<code>1)在配置最後增加2行</code>
<code>cat</code> <code>/etc/sysctl</code><code>.conf</code>
<code>kernel.core_pattern = </code><code>/opt/game/core/</code><code>%e.core.%s.%p.%h.%t</code>
<code>kernel.core_uses_pid = 1</code>
<code>2)永久生效</code>
<code>sysctl -p</code>
<code>3)參數說明</code>
<code>%e executable filename (without path prefix) </code><code>#dump的檔案名</code>
<code>%p PID of dumped process, as seen </code><code>in</code> <code>the PID namespace </code><code>in</code> <code>which</code> <code>the process resides </code><code>#dump的程序PID</code>
<code>%t </code><code>time</code> <code>of dump, expressed as seconds since the Epoch,1970-01-01 00:00:00 +0000 </code><code>#轉儲時刻(由1970年1月1日起計的秒數)</code>
<code>%h </code><code>hostname</code> <code>(same as nodename returned by </code><code>uname</code><code>(2)) </code><code>#主機名</code>
<code>%s number of signal causing dump </code><code>#coredump的信号 </code>
<code>三、apache2設定</code>
<code>1、再</code><code>/etc/apache2/apache2</code><code>.conf最後添加1行</code>
<code>cat</code> <code>/etc/apache2/apache2</code><code>.conf</code>
<code>CoreDumpDirectory </code><code>/opt/game/core</code>
<code>2、參數說明</code>
<code>文法:CoreDumpDirectory directory-path</code>
<code>這個指令用來控制Apache使用的核心轉儲目錄,該轉儲目錄預設位于“ServerRoot”下。因為這個目錄通常對于運作伺服器的使用者是不可寫的,</code>
<code>核心轉儲一般也不會寫入内容。如果你在調試中需要核心轉儲,那麼你可以用這個指令來指定另外一個目錄。</code>
<code>3、重新開機apache2服務</code>
<code>/etc/init</code><code>.d</code><code>/apache2</code> <code>restart</code>
<code>4、殺死apache2程序</code>
<code>先檢視下apache2程序</code>
<code>root 2342 0.0 1.2 71568 2916 ? Ss 02:29 0:00 </code><code>/usr/sbin/apache2</code> <code>-k start</code>
<code>www-data 2344 0.0 0.8 71592 2132 ? S 02:29 0:00 </code><code>/usr/sbin/apache2</code> <code>-k start</code>
<code>www-data 2345 0.0 0.8 71592 2132 ? S 02:29 0:00 </code><code>/usr/sbin/apache2</code> <code>-k start</code>
<code>www-data 2348 0.0 0.8 71592 2132 ? S 02:29 0:00 </code><code>/usr/sbin/apache2</code> <code>-k start</code>
<code>www-data 2349 0.0 0.8 71592 2132 ? S 02:29 0:00 </code><code>/usr/sbin/apache2</code> <code>-k start</code>
<code>www-data 2350 0.0 0.8 71592 2132 ? S 02:29 0:00 </code><code>/usr/sbin/apache2</code> <code>-k start</code>
<code>kill</code> <code>-11 2342</code>
<code>kill</code> <code>-11 2344</code>
<code>kill</code> <code>-11 2345</code>
<code>kill</code> <code>-11 2348</code>
<code>kill</code> <code>-11 2349</code>
<code>kill</code> <code>-11 2350</code>
<code>信号11說明</code>
<code>11) SIGSEGV 試圖通路未配置設定給自己的記憶體, 或試圖往沒有寫權限的記憶體位址寫資料.</code>
<code>5、檢視到已經有core産生了</code>
<code>ll </code><code>/opt/game/core/</code>
<code>-rw------- 1 root root 2596864 May 21 02:38 apache2.core.11.2342.10.1.10.117.1432190336</code>
<code>-rw------- 1 www-data www-data 2621440 May 21 02:38 apache2.core.11.2344.10.1.10.117.1432190338</code>
<code>-rw------- 1 www-data www-data 2621440 May 21 02:38 apache2.core.11.2345.10.1.10.117.1432190339</code>
<code>-rw------- 1 www-data www-data 2621440 May 21 02:39 apache2.core.11.2348.10.1.10.117.1432190344</code>
<code>-rw------- 1 www-data www-data 2621440 May 21 02:39 apache2.core.11.2349.10.1.10.117.1432190346</code>
<code>-rw------- 1 www-data www-data 2621440 May 21 02:39 apache2.core.11.2350.10.1.10.117.1432190349</code>
<code>6、使用gdb程式</code>
<code>1)先安裝gdb</code>
<code>apt-get -y </code><code>install</code> <code>gdb</code>
<code>2)使用gdb程式檢視</code>
<code>gdb apache2 -core </code><code>/opt/game/core/apache2</code><code>.core.11.2342.10.1.10.117.1432190336</code>
<code>GNU gdb (GDB) 7.4.1-debian</code>
<code>Copyright (C) 2012 Free Software Foundation, Inc.</code>
<code>License GPLv3+: GNU GPL version 3 or later <http:</code><code>//gnu</code><code>.org</code><code>/licenses/gpl</code><code>.html></code>
<code>This is </code><code>free</code> <code>software: you are </code><code>free</code> <code>to change and redistribute it.</code>
<code>There is NO WARRANTY, to the extent permitted by law. Type </code><code>"show copying"</code>
<code>and </code><code>"show warranty"</code> <code>for</code> <code>details.</code>
<code>This GDB was configured as </code><code>"x86_64-linux-gnu"</code><code>.</code>
<code>For bug reporting instructions, please see:</code>
<code><http:</code><code>//www</code><code>.gnu.org</code><code>/software/gdb/bugs/</code><code>>...</code>
<code>Reading symbols from </code><code>/usr/sbin/apache2</code><code>...(no debugging symbols found)...</code><code>done</code><code>.</code>
<code>[New LWP 2342]</code>
<code>warning: Can't </code><code>read</code> <code>pathname </code><code>for</code> <code>load map: Input</code><code>/output</code> <code>error.</code>
<code>[Thread debugging using libthread_db enabled]</code>
<code>Using host libthread_db library </code><code>"/lib/x86_64-linux-gnu/libthread_db.so.1"</code><code>.</code>
<code>Core was generated by `</code><code>/usr/sbin/apache2</code> <code>-k start'.</code>
<code>Program terminated with signal 11, Segmentation fault.</code>
<code>#0 0x00007f1d26736433 in select () from /lib/x86_64-linux-gnu/libc.so.6</code>
<code>四、參考文章</code>
<code>http:</code><code>//www</code><code>.cnblogs.com</code><code>/hazir/p/linxu_core_dump</code><code>.html </code>
<code>http:</code><code>//man7</code><code>.org</code><code>/linux/man-pages/man5/core</code><code>.5.html</code>
<code>http:</code><code>//www</code><code>.cyberciti.biz</code><code>/tips/configure-apache-web-server-for-core-dump</code><code>.html</code>
本文轉自 xdoujiang 51CTO部落格,原文連結:http://blog.51cto.com/7938217/1671716,如需轉載請自行聯系原作者