Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 7943|Yanıt: 0

php-fpm istisna hatasını hata ayıklamak için gdb kullanın

[Bağlantıyı kopyala]
Yayınlandı 23.05.2020 17:54:01 | | | |
GDB Girişi:

GDB, GNU Açık Kaynak Organizasyonu tarafından yayımlanan güçlü bir UNIX program hata ayıklama aracıdır. UNIX platformu üzerinde çalışıyorsanız, GDB'nin VC ve BCB'nin grafiksel hata ayıklayıcılarından daha güçlü işlevlere sahip bir hata ayıklama aracı olduğunu göreceksiniz.

sorun

Ortam: Linux/PHP v5.5.7

Cep telefonu bu sitenin arka planına eriştiğinde, bazı sayfalara tıklayın ve 502 hatası belirecek ve 502 hatasının özel nedenini öğrenmek istersiniz.

PHP-FPM hata kaydı aşağıdaki gibidir:

WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start

Çekirdek dosya

Çekirdek dosya aslında bir bellek görüntüsüdür; program çökerken, belleğin ilgili bilgilerini depolar; bu dosya esas olarak programı hata ayıklamak için kullanılır. Program çöktüğünde, bir core dosyası oluşturulur; aslında bunun bir core dump dosyası olduğu söylenebilir; varsayılan üretim konumu çalıştırılabilir programla aynı dizindedir, dosya adı core.***'dür, burada *** belirli bir sayıdır.

Komut:

çekirdek dosya boyutu (bloklar, -c) 0
Veri seg boyutu (kbayt, -d) sınırsız
Zamanlama önceliği (-e) 0
dosya boyutu (bloklar, -f) sınırsız
Bekleyen Sinyaller (-i) 7271
Maksimum kilitli bellek (kbayt, -l) 64
Maksimum Bellek Boyutu (Kbayt, -M) Sınırsız
Dosyaları aç (-n) 65535
Boru boyutu (512 bayt, -p) 8
POSIX mesaj kuyrukları (bayt, -q) 819200
Gerçek zamanlı öncelik (-r) 0
Yığın boyutu (kbayt, -s) 8192
CPU süresi (saniye, -t) sınırsız
maksimum kullanıcı süreçleri (-u) 7271
Sanal Bellek (kbayt, -V) sınırsız
Dosya Kilitleri (-X) Unlimited

Çekirdek dosya boyutu 0 ise, çekirdek dosya oluşturulamaz ve ayarlamamız gerekir.

ulimit -c unlimited, çekirdek dosyanın boyutunun sınırsız olduğu anlamına gelir


Kurulum tamamlandı, unutmayınphp-fpm servisini yeniden başlatın, komut şöyledir:



Hata kaydını tekrar kontrol edin, aşağıdaki gibi:

[23-Mayıs-2020 14:39:14] UYARI: [havuz www] çocuk 2220, 11 sinyalinde (SIGSEGV - çekirdek boşaldı) çıkış yaptı, başlangıçtan 7.255225 saniye sonra
[23-Mayıs-2020 14:39:14] BİLGİLİ: [havuz www] çocuk 2231 başladı

Günlükte "SIGSEGV – core dumped" ifadesi varsa, bu rore dosyasının başarıyla oluşturulduğu anlamına gelir.

Çekirdek dosya web sitesi dizininde oluşturulacak, bilmiyorsanız, çekirdek dosyayı aşağıdaki komutla da bulabilirsiniz:


Sunucumun çekirdeği tarafından oluşturulan adres şudur: /alidata/www/itsvse_web/core.2220

gdb kur

Komut şöyledir:



gdb debug php-fpm

.gdbinit dosyasını hazırla

.gdbinit dosyası PHP kaynak kodunun altında ve çalıştırdığınız php sürümüyle tutarlı olmalı!

Dosya adresim: /root/sh-1.5.5/php-5.5.7/.gdbinit

.gdbinit dosyasının en son php sürümünün indirme adresi:

Bağlantı girişi görünür.

Çekirdek dosyayı açmak için gdb

Çekirdek dosya dizininde aşağıdaki komutu çalıştırın:

[root@o itsvse_web]# gdb php-fpm -c core.2220
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Telif Hakkı (C) 2013 Free Software Foundation, Inc.'e ait.
GPLv3+ Lisansı: GNU GPL sürüm 3 veya daha yeni sürümler <Bağlantı girişi görünür.
Bu özgür yazılımdır: onu değiştirme ve yeniden dağıtma özgürlüğünüz.
Yasanın izin verdiği ölçüde GARANTI YOKTUR.  "Show copying" yazın
ve detaylar için "garantiyi göster" seçeneği.
Bu GDB "x86_64-redhat-linux-gnu" olarak yapılandırıldı.
Hata bildirim talimatları için lütfen bakınız:
<Bağlantı girişi görünür.
/alidata/server/php-5.5.7/sbin/php-fpm sembollerinden okunuyorum... Bitti.
[Yeni LWP 2220]
[libthread_db etkinleştirilmiş olarak konu hata ayıklama]
"/lib64/libthread_db.so.1" libthread_db host kütüphanesi kullanıyorum.
Core, 'php-fpm: pool www' tarafından oluşturuldu.
Program, sinyal 11, Segmentasyon hatası ile sonlandırıldı.
#0 tsrm_realpath_r (
    path=path@entry=0x7ffdd9ebf100 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php",
    start=start@entry=1, len=66, ll=ll@entry=0x7ffdd9ebf0f4, t=t@entry=0x7ffdd9ebf0f8,
    use_realpath=use_realpath@entry=2, is_dir=is_dir@entry=0, link_is_dir=link_is_dir@entry=0x0)
    at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
751        {
Ayrı hata ayıklama bilgileri eksik, şu şekilde kullanın: debuginfo-install cyrus-sasl-lib-2.1.26-23.el7.x86_64 glibc-2.17-307.el7.1.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.15.1-46.el7.x86_64 libcom_err-1.42.9-17.el7.x86_64 libcurl-7.29.0-57.el7.x86_64 libgcc-4.8.5-39.el7.x86_64 libidn-1.28-4.el7.x86_64 libselinux-2.5-15.el7.x86_ 64 libssh2-1.8.0-3.el7.x86_64 libstdc++-4.8.5-39.el7.x86_64 libxml2-2.9.1-6.el7.4.x86_64 nspr-4.21.0-1.el7.x86_64 nss-3.44.0-7.el7_7.x86_64 nss-softokn-freebl-3.44.0-8.el7_ 7.x86_64 nss-util-3.44.0-4.el7_7.x86_64 openLDAP-2.4.44-21.el7_6.x86_64 openssl-libs-1.0.2k-19.el7.x86_64 pcre-8.32-17.el7.x86_64 xz-libs-5.2.2-1.el7.x86_64 zlib-1.2.7-18.el7.x86_64

Aşağıdaki gibi kelimeleri görebilirsiniz:

Core, 'php-fpm: pool www' tarafından oluşturuldu.
Program, sinyal 11, Segmentasyon hatası ile sonlandırıldı.

bt(backtrace): Çağrı yığınını listeler

(gdb) bt
#0 tsrm_realpath_r (
    path=path@entry=0x7ffdd9ebf100 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php",
    start=start@entry=1, len=66, ll=ll@entry=0x7ffdd9ebf0f4, t=t@entry=0x7ffdd9ebf0f8,
    use_realpath=use_realpath@entry=2, is_dir=is_dir@entry=0, link_is_dir=link_is_dir@entry=0x0)
    at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
#1 0x000000000075209a virtual_file_ex (durum=state@entry=0x7ffdd9ec0140,
    path=path@entry=0xed3a4d8 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php",
    verify_path=verify_path@entry=0x0, use_realpath=use_realpath@entry=2)
    at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292
#2 0x000000000075308c tsrm_realpath (
    path=path@entry=0xed3a4d8 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php",
    real_path=real_path@entry=0x7ffdd9ec1250 "vse_web/./source/plugin/dsu_amupper/pper.class.p\300\023\354\331\375\177") at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954



Çıkış başlığını inceleyin


PHP kaynak kodunda sağlanan .gdbinit (gdb komut betikleme) tanıtım



zbacktrace ve değişken değerlerine bakın

(gdb) zbacktrace
[0xed9f8f0] lang() /alidata/www/itsvse_web/source/function/function_core.php:444
[0xed9e2e8] lang("core", "title_board_message") /alidata/www/itsvse_web/source/function/function_message.php:43
[0xed9a988] dshowmessage("mobile_template_no_found", "", array(1)[0xec46a28], array(0)[0xec46bc0], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426
[0xed9a6d8] showmessage("mobile_template_no_found", "", array(1)[0xec46a28]) /alidata/www/itsvse_web/source/function/function_core.php:618
[0xed97638] template("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec3e50] plugin_dsu_amupper->global_footer(dizi(0)[0xec40028])
[0xed97080] call_user_func(array(2)[0xed6b8b0], array(0)[0xec40028]) /alidata/www/itsvse_web/source/function/function_core.php:1177
[0xed954b8] hookscript("global", "global") /alidata/www/itsvse_web/source/function/function_core.php:1214
[0xed95218] hookscriptoutput("gösteri mesajı") /alidata/www/itsvse_web/data/template/8_8_touch_common_showmessage.tpl.php:1
[0xed949e8] ??? /alidata/www/itsvse_web/source/function/function_message.php:237
[0xed91088] dshowmessage("mobile_template_no_found", "", array(1)[0xec40c10], array(0)[0xec76d40], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426
[0xed90dd8] showmessage("mobile_template_no_found", "", array(1)[0xec40c10]) /alidata/www/itsvse_web/source/function/function_core.php:618
[0xed8dd38] template("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec49a0] plugin_dsu_amupper->global_footer(dizi(0)[0xec39ab0])
[0xed8d780] call_user_func(array(2)[0xeb833e8], array(0)[0xec39ab0]) /alidata/www/itsvse_web/source/function/function_core.php:1177
[0xed8bbb8] hookscript("global", "global") /alidata/www/itsvse_web/source/function/function_core.php:1214
[0xed8b918] hookscriptoutput("gösteri mesajı") /alidata/www/itsvse_web/data/template/8_8_touch_common_showmessage.tpl.php:1
[0xed8b0e8] ??? /alidata/www/itsvse_web/source/function/function_message.php:237
[0xed651b0] dshowmessage("mobile_template_no_found", "", array(1)[0xecc0fe0], array(0)[0xec76718], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426
[0xed64f00] showmessage("mobile_template_no_found", "", array(1)[0xecc0fe0]) /alidata/www/itsvse_web/source/function/function_core.php:618
[0xed61e60] template("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec54f0] plugin_dsu_amupper->global_footer(array(0)[0xeb834f8])

(gdb) baskı ((zval *)0xec46a28)
$1 = (zval *) 0xec46a28
(GBB) Printzv $1
[0xec46a28] (refcount=5) dizi(1): {
    "url\0" => [0xecb2fb0] (refcount=2) string(33): "/admin.php?action=index&mobile=no"
  }
(gdb)
Çözüm

Aslında hata görmedim ama kayıtlardan mobil erişimde bir sorun olduğu açıkça görülüyordu ve test ettikten sonra gerçekten sadece mobil erişim durumunda 502 hatası olduğunu anladım.

Arka planda mobil sürüm olmadığı için, admin.php kaynak kodunu doğrudan değiştirdim ve ilk satıra şu kodu ekledim:

Bu şekilde, program her zaman PC tarayıcısından erişim talebi alır ve mobil telefon versiyonunun mantıksal kodundan geçmeyecek, bu da çözüldü!




Önceki:Nginx, 404 hata sayfasını özelleştiriyor ve 200 durum kodu çözümü döndürüyor
Önümüzdeki:Angular'da [ngClass] ve [ngStyle]'ın temel kullanımı
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com