Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 7943|Svar: 0

Använd gdb för att felsöka php-fpm-undantagsfelet

[Kopiera länk]
Publicerad på 2020-05-23 17:54:01 | | | |
GDB Introduktion:

GDB är ett kraftfullt UNIX-program för felsökning som släppts av GNU Open Source Organization. Om du arbetar med UNIX-plattformen kommer du att upptäcka att GDB är ett felsökningsverktyg med kraftfullare funktioner än de grafiska felsökarna i VC och BCB.

utfärda

Miljö: Linux/PHP v5.5.7

När mobiltelefonen får tillgång till bakgrunden på denna sida, klicka på några sidor, och 502-felet kommer att visas, och du vill ta reda på vad som är den specifika orsaken till 502-felet.

PHP-FPM-felloggen är följande:

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

Kärnfil

Kärnfilen är egentligen en bild av minnet, som lagrar motsvarande information om minnet när programmet kraschar, och används främst för att felsöka programmet. När programmet kraschar genereras en kärnfil, faktiskt bör det sägas vara en core dump-fil, standardgenereringsplatsen är i samma katalog som det körbara programmet, filnamnet är core.***, där *** är ett visst nummer.

Befallning:

Kärnfilstorlek (block, -c) 0
Datastorlek (kbytes, -d) obegränsad
Schemaläggningsprioritet (-e) 0
Filstorlek (block, -f) obegränsad
Väntande signaler (-i) 7271
Max låst minne (kbytes, -l) 64
Max minnesstorlek (kbytes, -m) obegränsad
öppna filer (-n) 65535
rörstorlek (512 byte, -p) 8
POSIX-meddelandeköer (bytes, -q) 819200
Realtidsprioritet (-R) 0
Stackstorlek (kbytes, -s) 8192
CPU-tid (sekunder, -t) obegränsad
MAX användarprocesser (-u) 7271
Virtuellt minne (kbytes, -v) obegränsat
fillås (-x) obegränsat

Om kärnfilstorleken är 0 kan kärnfilen inte genereras, och vi måste ställa in den.

ulimit -c unlimited, det betyder att storleken på kärnfilen är obegränsad


Uppsättningen klar, kom ihågStarta om php-fpm-tjänsten, kommandot är följande:



Kontrollera felloggen igen, enligt följande:

[23 maj 2020 14:39:14] VARNING: [pool www] barn 2220 lämnade signal 11 (SIGSEGV - kärna dumpad) efter 7,255225 sekunder från start
[23 maj 2020 14:39:14] MEDDELANDE: [pool www] barn 2231 påbörjades

Om loggen innehåller orden "SIGSEGV – core dumped" betyder det att rore-filen har genererats framgångsrikt.

Kärnfilen kommer att genereras under webbplatskatalogen, om du inte vet det kan du också hitta kärnfilen med följande kommando:


Adressen som genereras av kärnan på min server är: /alidata/www/itsvse_web/core.2220

Installera gdb

Kommandot är följande:



GDB Debug PHP-FPM

Förbered .gdbinit-filen

.gdbinit-filen ligger under PHP-källkoden, och den måste vara konsekvent med den php-version du kör!

Min filadress: /root/sh-1.5.5/php-5.5.7/.gdbinit

Nedladdningsadressen till den senaste php-versionen av .gdbinit-filen:

Inloggningen med hyperlänken är synlig.

gdb för att öppna kärnfilen

I kärnfilskatalogen, kör följande kommando:

[root@o itsvse_web]# GDB php-fpm -c core.2220
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Upphovsrätt (C) 2013 Free Software Foundation, Inc.
Licens GPLv3+: GNU GPL version 3 eller senare <Inloggningen med hyperlänken är synlig.
Detta är fri programvara: du är fri att ändra och distribuera den.
Det finns INGEN GARANTI, i den utsträckning lagen tillåter.  Skriv "visa kopiering"
och "Visa garanti" för detaljer.
Denna GDB konfigurerades som "x86_64-redhat-linux-gnu".
För instruktioner för buggrapportering, se:
<Inloggningen med hyperlänken är synlig.
Att läsa symboler från /alidata/server/php-5.5.7/sbin/php-fpm... Klart.
[Ny LWP 2220]
[Trådfelsökning med libthread_db aktiverat]
Använder värd libthread_db biblioteket "/lib64/libthread_db.so.1".
Core genererades av 'php-fpm: pool www'.
Programmet avslutades med signal 11, segmenteringsfel.
#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)
    på /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
751        {
Saknar separata debuginfos, använd: 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

Du kan se något i stil med följande ord:

Core genererades av 'php-fpm: pool www'.
Programmet avslutades med signal 11, segmenteringsfel.

bt(backtrace): Listar anropsstacken

(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)
    på /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
#1 0x000000000075209a i virtual_file_ex (tillstånd=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)
    på /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292
#2 0x000000000075308c i 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") på /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954



Gå igenom exittråden


Introduktion av .gdbinit (gdb-kommandoskript) som tillhandahålls i PHP-källkoden



Titta på zbacktrace- och variabelvärdena

(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(array(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] template("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec49a0] plugin_dsu_amupper->global_footer(array(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] 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) Skriv ut ((ZVAL *)0xec46a28)
$1 = (zval *) 0xec46a28
(GDB) PrintZV $1
[0xec46a28] (refcount=5) array(1): {
    "URL\0" => [0xecb2fb0] (refcount=2) sträng(33): "/admin.php?action=index&mobile=no"
  }
(gdb)
Lösning

Jag såg faktiskt inga fel, men det var uppenbart från loggarna att det fanns ett problem med mobilåtkomsten, och efter testning var det faktiskt ett 502-fel endast i fallet med mobilåtkomst.

Eftersom det inte finns någon mobilversion i bakgrunden modifierade jag direkt admin.php källkod och lade till följande kod på första raden:

På så sätt får programmet alltid en åtkomstförfrågan från PC-webbläsaren, och det går inte igenom den logiska koden för mobiltelefonversionen, löst!




Föregående:Nginx anpassar 404-felsidan och returnerar en lösning med 200-statuskod
Nästa:Grundläggande användning av [ngClass] och [ngStyle] i Angular
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com