Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 7943|Răspunde: 0

Folosește gdb pentru a depana eroarea de excepție php-fpm

[Copiază linkul]
Postat pe 23.05.2020 17:54:01 | | | |
Introducere GDB:

GDB este un instrument puternic de depanare a programelor UNIX lansat de organizația GNU Open Source. Dacă lucrezi pe platforma UNIX, vei descoperi că GDB este un instrument de depanare care are funcții mai puternice decât depanatorii grafici VC și BCB.

problemă

Mediu: Linux/PHP v5.5.7

Când telefonul mobil accesează fundalul acestui site, faceți clic pe câteva pagini și va apărea eroarea 502, dorind să aflați care este motivul specific al erorii 502.

Jurnalul de erori PHP-FPM este următorul:

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

Fișier de bază

Fișierul de bază este de fapt o imagine a memoriei, care stochează informațiile corespunzătoare ale memoriei când programul se blochează și este folosit în principal pentru depanarea programului. Când programul se blochează, va fi generat un fișier core, de fapt, ar trebui spus că este un fișier core dump, locația implicită de generare este în același director cu programul executabil, numele fișierului este core.***, unde *** este un anumit număr.

Comanda:

Dimensiunea fișierului de bază (blocuri, -c) 0
Data Seg Dimensiunea (Kbytes, -D) nelimitată
Prioritate de programare (-e) 0
Dimensiunea fișierului (Blocks, -F) nelimitată
Semnale în așteptare (-i) 7271
Memorie blocată maximă (kbytes, -l) 64
Dimensiunea maximă a memoriei (kbytes, -m) nelimitată
Fișiere deschise (-N) 65535
Dimensiunea țevii (512 octeți, -p) 8
Cozi de mesaje POSIX (octeți, -q) 819200
Prioritate în timp real (-r) 0
Dimensiunea stivei (kbytes, -s) 8192
Timp CPU (secunde, -t) nelimitat
Procese maxime de utilizator (-U) 7271
Memorie virtuală (kbytes, -v) nelimitată
Blocaje de fișiere (-x) nelimitate

Dacă dimensiunea fișierului de bază este 0, fișierul de bază nu poate fi generat și trebuie să-l setăm.

ulimit -c unlimited, înseamnă că dimensiunea fișierului de bază este nelimitată


Pregătirea este completă, amintește-țiRepornește serviciul php-fpm, comanda este următoarea:



Verifică din nou jurnalul de erori, după cum urmează:

[23-mai-2020 14:39:14] ATENȚIE: [pool www] copilul 2220 a ieșit la semnalul 11 (SIGSEGV - nucleu evacuat) după 7,255225 secunde de la pornire
[23-mai-2020 14:39:14] NOTIFICARE: [pool www] copilul 2231 a început

Dacă jurnalul conține cuvintele "SIGSEGV – core dumped", înseamnă că fișierul rore a fost generat cu succes.

Fișierul de bază va fi generat în directorul site-ului, dacă nu știi, poți găsi și fișierul de bază cu următoarea comandă:


Adresa generată de nucleul serverului meu este: /alidata/www/itsvse_web/core.2220

Instalează gdb

Comanda este următoarea:



depanare gdb php-fpm

Pregătește fișierul .gdbinit

Fișierul .gdbinit este sub codul sursă PHP și trebuie să fie compatibil cu versiunea php pe care o folosești!

Adresa fișierului meu: /root/sh-1.5.5/php-5.5.7/.gdbinit

Adresa de descărcare a celei mai recente versiuni php a fișierului .gdbinit:

Autentificarea cu hyperlink este vizibilă.

GDB pentru a deschide fișierul de bază

În directorul de fișiere de bază, rulează următoarea comandă:

[root@o itsvse_web]# GDB PHP-FPM -C Core.2220
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Drepturi de autor (C) 2013 Free Software Foundation, Inc.
Licență GPLv3+: GNU GPL versiunea 3 sau ulterioară <Autentificarea cu hyperlink este vizibilă.
Acesta este software liber: ești liber să-l modifici și să-l redistribui.
NU EXISTĂ NICIO GARANȚIE, în măsura permisă de lege.  Scrie "afișează copierea"
și "arată garanția" pentru detalii.
Acest GDB a fost configurat ca "x86_64-redhat-linux-gnu".
Pentru instrucțiuni de raportare a bug-urilor, vă rugăm să consultați:
<Autentificarea cu hyperlink este vizibilă.
Citirea simbolurilor de la /alidata/server/php-5.5.7/sbin/php-fpm... gata.
[Noul LWP 2220]
[Depanarea firului folosind libthread_db activată]
Folosirea gazdei libthread_db bibliotecii "/lib64/libthread_db.so.1".
Core a fost generat de 'php-fpm: pool www'.
Program încheiat cu semnalul 11, defecțiune de segmentare.
#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)
    la /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
751        {
Dacă lipsesc debuginfos separate, folosiți: 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

Poți vedea ceva de genul următorului cuvânt:

Core a fost generat de 'php-fpm: pool www'.
Program încheiat cu semnalul 11, defecțiune de segmentare.

bt(backtrace): Listează stack-ul de apeluri

(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)
    la /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
#1 0x000000000075209a în virtual_file_ex (stare=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)
    la /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292
#2 0x000000000075308c în 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") la /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954



Revizuiește firul de ieșire


Introducerea .gdbinit (scripting de comenzi gdb) oferit în codul sursă PHP



Uită-te la zbacktrace și la valorile variabilelor

(gdb) zbacktrace
[0xed9f8f0] lang() /alidata/www/itsvse_web/source/function/function_core.php:444
[0xed9e2e8] lang("nucleu", "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] șablon("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec3e50] plugin_dsu_amupper->global_footer(aranjament(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("showmessage") /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] șablon("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec49a0] plugin_dsu_amupper->global_footer(aranjament(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("showmessage") /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] șablon("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec54f0] plugin_dsu_amupper->global_footer(aranjament(0)[0xeb834f8])

(gdb) print ((zval *)0xec46a28)
$1 = (zval *) 0xec46a28
(GDB) PrintZV $1
[0xec46a28] (refcount=5) array(1): {
    "url\0" => [0xecb2fb0] (refcount=2) string(33): "/admin.php?action=index&mobile=no"
  }
(gdb)
Soluție

De fapt, nu am văzut erori, dar era evident din jurnale că era o problemă cu accesul mobil, iar după testare, era într-adevăr o eroare 502 doar în cazul accesului mobil.

Pentru că nu există o versiune mobilă în fundal, am modificat direct codul sursă admin.php și am adăugat următorul cod pe prima linie:

Astfel, programul va primi întotdeauna o cerere de acces din browserul PC-ului și nu va parcurge codul logic al versiunii de telefon mobil, rezolvat!




Precedent:Nginx personalizează pagina de eroare 404 și returnează o soluție de cod de stare 200
Următor:Utilizarea de bază a [ngClass] și [ngStyle] în Angular
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com