Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 7943|Atsakyti: 0

Naudokite gdb derinti php-fpm išimties klaidą

[Kopijuoti nuorodą]
Paskelbta 2020-05-23 17:54:01 | | | |
GDB įvadas:

GDB yra galingas UNIX programos derinimo įrankis, kurį išleido GNU atvirojo kodo organizacija. Jei dirbate su UNIX platforma, pamatysite, kad GDB yra derinimo įrankis, turintis galingesnes funkcijas nei VC ir BCB grafiniai derintuvai.

išduoti

Aplinka: Linux / PHP v5.5.7

Kai mobilusis telefonas pasiekia šios svetainės foną, spustelėkite kai kuriuos puslapius ir pasirodys 502 klaida ir norite sužinoti, kokia yra konkreti 502 klaidos priežastis.

PHP-FPM klaidų žurnalas yra toks:

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

Pagrindinis failas

Pagrindinis failas iš tikrųjų yra atminties vaizdas, kuriame saugoma atitinkama atminties informacija, kai programa sugenda, ir daugiausia naudojamas programai derinti. Kai programa sugenda, bus sugeneruotas pagrindinis failas, iš tikrųjų reikėtų sakyti, kad tai yra pagrindinis iškelties failas, numatytoji generavimo vieta yra tame pačiame kataloge kaip ir vykdomoji programa, failo pavadinimas yra branduolys.***, kur *** yra tam tikras skaičius.

Komanda:

Pagrindinis failo dydis (blokai, -c) 0
Duomenų seg dydis (KB, -D) Neribotas
Planavimo prioritetas (-e) 0
Failo dydis (blokai, -f) neribotas
laukiantys signalai (-i) 7271
Maksimali užrakinta atmintis (KB, -L) 64
Maksimalus atminties dydis (KB, -m) Neribotas
Atidaryti failus (-N) 65535
Vamzdžio dydis (512 baitų, -P) 8
POSIX pranešimų eilės (baitai, -q) 819200
Prioritetas realiuoju laiku (-R) 0
Rietuvės dydis (KB, -S) 8192
Procesoriaus laikas (sekundės, -t) neribotas
Maksimalus vartotojo procesų skaičius (-u) 7271
Virtuali atmintis (KB, -V) neribota
Failų užraktai (-x) neribotas

Jei pagrindinio failo dydis yra 0, pagrindinio failo generuoti negalima, todėl turime jį nustatyti.

ulimit -c neribotas, tai reiškia, kad pagrindinio failo dydis yra neribotas


Sąranka baigta, prisimintiIš naujo paleiskite php-fpm paslaugą, komanda yra tokia:



Dar kartą patikrinkite klaidų žurnalą, kaip nurodyta toliau.

[2020 m. gegužės 23 d. 14:39:14] ĮSPĖJIMAS: [baseinas www] vaikas 2220 išėjo 11 signalu (SIGSEGV - šerdis išmestas) po 7.255225 sekundžių nuo pradžios
[2020 m. gegužės 23 d. 14:39:14] PASTABA: [pool www] vaikas 2231 pradėjo

Jei žurnale yra žodžiai "SIGSEGV – core dumped", tai reiškia, kad rore failas buvo sėkmingai sugeneruotas.

Pagrindinis failas bus sugeneruotas svetainės kataloge, jei nežinote, taip pat galite rasti pagrindinį failą naudodami šią komandą:


Mano serverio branduolio sugeneruotas adresas yra: /alidata/www/itsvse_web/core.2220

Įdiekite gdb

Komanda yra tokia:



GDB derinimas PHP-FPM

Paruoškite .gdbinit failą

.gdbinit failas yra pagal PHP šaltinio kodą, ir jis turi atitikti PHP versiją, kurią naudojate!

Mano failo adresas: /root/sh-1.5.5/php-5.5.7/.gdbinit

Parsisiųsti adresą naujausią php versiją .gdbinit failą:

Hipersaito prisijungimas matomas.

gdb, kad atidarytumėte pagrindinį failą

Pagrindiniame failų kataloge paleiskite šią komandą:

[root@o itsvse_web]# gdb php-fpm -c branduolys.2220
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Autorių teisės (C) 2013 Free Software Foundation, Inc.
Licencija GPLv3+: GNU GPL 3 arba naujesnė versija <Hipersaito prisijungimas matomas.
Tai yra laisva programinė įranga: jūs galite laisvai ją keisti ir platinti.
GARANTIJOS NĖRA, tiek, kiek leidžia įstatymai.  Įveskite "rodyti kopijavimą"
ir "Rodyti garantiją" išsamesnės informacijos.
Šis GDB buvo sukonfigūruotas kaip "x86_64-redhat-linux-gnu".
Pranešimų apie klaidas instrukcijas žr.:
<Hipersaito prisijungimas matomas.
Skaitomi simboliai iš /alidata/server/php-5.5.7/sbin/php-fpm... atlikta.
[Naujas LWP 2220]
[Gijos derinimas naudojant įjungtą libthread_db]
Pagrindinio kompiuterio libthread_db bibliotekos naudojimas "/lib64/libthread_db.so.1".
Branduolį sukūrė "php-fpm: pool www".
Programa nutraukta signalu 11, segmentavimo klaida.
#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)
    adresu /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
751        {
Trūksta atskirų debuginfos, naudokite: 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

Galite pamatyti kažką panašaus į šiuos žodžius:

Branduolį sukūrė "php-fpm: pool www".
Programa nutraukta signalu 11, segmentavimo klaida.

bt(backtrace): išvardija skambučių krūvą

(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)
    adresu /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
#1 0x000000000075209a virtual_file_ex (state=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)
    adresu /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292
#2 0x000000000075308c tsrm_realpath m. (
    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



Peržiūrėkite išėjimo giją.


Pristatome .gdbinit (gdb komandų scenarijus), pateiktą PHP šaltinio kode



Pažvelkite į zbacktrace ir kintamųjų reikšmes

(gdb) zbacktrace
[0xed9f8f0] lang() /alidata/www/itsvse_web/source/function/function_core.php:444
[0xed9e2e8] lang("branduolys", "title_board_message") /alidata/www/itsvse_web/source/function/function_message.php:43
[0xed9a988] dshowmessage("mobile_template_no_found", "", masyvas(1)[0xec46a28], masyvas(0)[0xec46bc0], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426
[0xed9a6d8] showmessage("mobile_template_no_found", "", masyvas(1)[0xec46a28]) /alidata/www/itsvse_web/source/function/function_core.php:618
[0xed97638] šablonas("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec3e50] plugin_dsu_amupper->global_footer(masyvas(0)[0xec40028])
[0xed97080] call_user_func(masyvas(2)[0xed6b8b0], masyvas(0)[0xec40028]) /alidata/www/itsvse_web/source/function/function_core.php:1177
[0xed954b8] hookscript("globalus", "globalus") /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", "", masyvas(1)[0xec40c10], masyvas(0)[0xec76d40], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426
[0xed90dd8] showmessage("mobile_template_no_found", "", masyvas(1)[0xec40c10]) /alidata/www/itsvse_web/source/function/function_core.php:618
[0xed8dd38] šablonas("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec49a0] plugin_dsu_amupper->global_footer(masyvas(0)[0xec39ab0])
[0xed8d780] call_user_func(masyvas(2)[0xeb833e8], masyvas(0)[0xec39ab0]) /alidata/www/itsvse_web/source/function/function_core.php:1177
[0xed8bbb8] hookscript("globalus", "globalus") /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", "", masyvas(1)[0xecc0fe0], masyvas(0)[0xec76718], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426
[0xed64f00] showmessage("mobile_template_no_found", "", masyvas(1)[0xecc0fe0]) /alidata/www/itsvse_web/source/function/function_core.php:618
[0xed61e60] šablonas("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec54f0] plugin_dsu_amupper->global_footer(masyvas(0)[0xeb834f8])

(gdb) spausdinti ((zval *)0xec46a28)
$1 = (zval *) 0xec46a28
(GDB) printzv $1
[0xec46a28] (refcount=5) masyvas(1): {
    "url\0" => [0xecb2fb0] (refcount=2) string(33): "/admin.php?action=index&mobile=no"
  }
(gdb)
Sprendimas

Iš tikrųjų nemačiau jokių klaidų, bet iš žurnalų buvo akivaizdu, kad kilo problema su mobiliąja prieiga, o po bandymų tai iš tikrųjų buvo 502 klaida tik mobiliosios prieigos atveju.

Kadangi fone nėra mobiliosios versijos, tiesiogiai modifikavau admin.php šaltinio kodą ir pirmoje eilutėje pridėjau šį kodą:

Tokiu būdu programa visada gaus prieigos užklausą iš kompiuterio naršyklės ir nepereis per loginį mobiliojo telefono versijos kodą, išspręstą!




Ankstesnis:"Nginx" tinkina 404 klaidos puslapį ir pateikia 200 būsenos kodo sprendimą
Kitą:Pagrindinis [ngClass] ir [ngStyle] naudojimas "Angular"
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com