banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Debug PHP bị segfault  XML
  [Discussion]   Debug PHP bị segfault 03/03/2011 19:40:13 (+0700) | #1 | 232353
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Bạn có một LAMP server. Một hôm bạn thấy một lỗi PHP bị segmentation fault trong /var/log/messages:
kernel: php[27700]: segfault at 0000003455c094fe rip 0000003455c094fe rsp 0000000041a3a0d8 error 14 

Trong khi error_log của Apache lại không có gì liên quan. Bạn sẽ bắt đầu debug từ đâu?
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Debug PHP bị segfault 03/03/2011 20:04:38 (+0700) | #2 | 232357
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
tắt hết php extension rồi cứ thế bật lại từng cái cho tới khi phun lỗi. smilie.
Nếu tìm được thì kiếm version mới hơn của extension đó compile lại, nếu không tìm được thì compile lại php, update lên version mới nếu có.
Còn nếu không được nữa em bó tay smilie)
All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Discussion]   Debug PHP bị segfault 03/03/2011 20:25:44 (+0700) | #3 | 232359
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Bạn nào có cách khác không, chứ mình sợ cái list này nhiều khi hơi dài.
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Debug PHP bị segfault 11/03/2011 13:36:13 (+0700) | #4 | 232806
LeVuHoang
HVA Friend

Joined: 08/03/2003 16:54:07
Messages: 1155
Offline
[Profile] [PM]
quanta thử dùng mod_backtrace xem.
[Up] [Print Copy]
  [Discussion]   Debug PHP bị segfault 11/03/2011 16:02:20 (+0700) | #5 | 232813
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Không bạn nào nghĩ đến việc "bắt" nó gen ra core file nhỉ: http://bugs.php.net/bugs-generating-backtrace.php

Nhưng điều kiện tiên quyết là phải compile PHP với --enable-debug. Trong khi đó mình lại cài các thứ từ yum, mặc định là --disable-debug.

Giống như việc mình thử compile mod_backtrace:
Code:
# apxs -ci mod_backtrace.c 
/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing  -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd  -I/usr/include/apr-1   -I/usr/include/apr-1   -c -o mod_backtrace.lo mod_backtrace.c && touch mod_backtrace.slo
mod_backtrace.c:82: error: expected ')' before '*' token
mod_backtrace.c: In function 'bt_register_hooks':
mod_backtrace.c:159: warning: implicit declaration of function 'ap_hook_fatal_exception'
mod_backtrace.c:159: error: 'bt_exception_hook' undeclared (first use in this function)
mod_backtrace.c:159: error: (Each undeclared identifier is reported only once
mod_backtrace.c:159: error: for each function it appears in.)
apxs:Error: Command failed with rc=65536


Chắc là Apache không được compile với --enable-exception-hook rồi.

Giả sử mình không muốn compile lại từ source, đó các bạn biết có cách nào sửa hoặc thêm, bớt các configure options này không?
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Debug PHP bị segfault 12/03/2011 01:28:32 (+0700) | #6 | 232834
LeVuHoang
HVA Friend

Joined: 08/03/2003 16:54:07
Messages: 1155
Offline
[Profile] [PM]
Đổ ra core file thì có 2 cách đó:
1 là dùng gdb
2 là dùng mod_backtrace như đã nói bên trên dễ dàng hơn
Nếu quanta không đủ khả năng can thiệp vào apache như vậy thì có cho ra dump file cũng chỉ đọc để chơi thôi. Tuy nhiên gdb cũng là 1 giải pháp không tồi.
Có 1 thời gian tui cũng phải debug php nên có thể recommend cho lão thêm 1 số tool nữa
- mod_whatkilledus, cũng phải compile như mod_backtrace
- strace
Còn không dễ nhất như mR.Bi đã nói là tắt từng module và chịu khó mất công vậy.
1 là tốn công compile, 2 là tốn công ngồi mò. Compile cũng không chịu mà ngồi mò cũng không thì làm sao ra smilie.
Ngoài ra, lão nên xem những module nào mà web không cần dùng đến disable đi cho nhẹ người. Thông thường cũng chỉ dùng 1 số module căn bản thôi.
Nhưng như trên tui đã nói đó, nếu không phải PHP team, chắc coi đến mức biết module nào gây crash là hết cỡ. Lúc đó có muốn disable module đó cũng không được vì nhiều khi website lại cần nó.
Mấy cái ZendGuard, IceCube... hay xảy ra mấy tình trạng này.
[Up] [Print Copy]
  [Discussion]   Debug PHP bị segfault 19/03/2011 08:47:44 (+0700) | #7 | 233497
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

LeVuHoang wrote:
Đổ ra core file thì có 2 cách đó:
1 là dùng gdb
2 là dùng mod_backtrace như đã nói bên trên dễ dàng hơn
Nếu quanta không đủ khả năng can thiệp vào apache như vậy thì có cho ra dump file cũng chỉ đọc để chơi thôi. Tuy nhiên gdb cũng là 1 giải pháp không tồi.
 

LeVuHoang wrote:

Nhưng như trên tui đã nói đó, nếu không phải PHP team, chắc coi đến mức biết module nào gây crash là hết cỡ. Lúc đó có muốn disable module đó cũng không được vì nhiều khi website lại cần nó.
 

Đúng như lão nói, hiện tại thì tôi cũng chỉ đủ khả năng tìm ra xem module nào bị crash thôi.

LeVuHoang wrote:

Có 1 thời gian tui cũng phải debug php nên có thể recommend cho lão thêm 1 số tool nữa
- mod_whatkilledus, cũng phải compile như mod_backtrace
- strace
 

strace thì tôi có biết và thử trong một số trường hợp bị segfault rồi. Tôi sẽ thử ngâm cứu mod_whatkilledus. Cảm ơn lão.

LeVuHoang wrote:

Còn không dễ nhất như mR.Bi đã nói là tắt từng module và chịu khó mất công vậy.
 

Tôi không thích cách này.

LeVuHoang wrote:

1 là tốn công compile, 2 là tốn công ngồi mò. Compile cũng không chịu mà ngồi mò cũng không thì làm sao ra smilie.
 

Đâu, tôi vẫn chịu compile đấy chứ (nếu cần thiết). Tuy nhiên, tôi vẫn đặt ra câu hỏi để mọi người thảo luận:
Có cách nào chỉnh sửa các configure options của một package cài từ binary không? 

LeVuHoang wrote:

Ngoài ra, lão nên xem những module nào mà web không cần dùng đến disable đi cho nhẹ người. Thông thường cũng chỉ dùng 1 số module căn bản thôi.

Mấy cái ZendGuard, IceCube... hay xảy ra mấy tình trạng này. 

OK lão.
Let's build on a great foundation!
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|