Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 7943|Svar: 0

Brug gdb til at fejlfinde php-fpm undtagelsesfejl

[Kopier link]
Opslået på 23/05/2020 17.54.01 | | | |
GDB Introduktion:

GDB er et kraftfuldt UNIX-programfejlfindingsværktøj udgivet af GNU Open Source Organization. Hvis du arbejder på UNIX-platformen, vil du opdage, at GDB er et fejlsøgningsværktøj med mere kraftfulde funktioner end de grafiske debuggere i VC og BCB.

spørgsmål

Miljø: Linux/PHP v5.5.7

Når mobiltelefonen får adgang til baggrunden på dette site, klik på nogle sider, og 502-fejlen vil dukke op, og du vil gerne finde ud af, hvad den specifikke årsag til 502-fejlen er.

PHP-FPM fejllogen er som følger:

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

Kernefil

Kernefilen er faktisk et billede af hukommelsen, som gemmer den tilsvarende information om hukommelsen, når programmet crasher, og bruges hovedsageligt til at fejlfinde programmet. Når programmet crasher, vil en kernefil blive genereret, faktisk bør det siges at være en core dump-fil, standardgenereringsstedet er i samme mappe som det eksekverbare program, filnavnet er core.***, hvor *** er et bestemt tal.

Kommando:

Kernefilstørrelse (blokke, -c) 0
Data-Seg-størrelse (kbytes, -d) Ubegrænset
Planlægningsprioritet (-e) 0
Filstørrelse (blokke, -f) ubegrænset
Ventende signaler (-i) 7271
Max låst hukommelse (kbytes, -l) 64
Maksimal hukommelsesstørrelse (kbytes, -m) ubegrænset
Åbn filer (-N) 65535
rørstørrelse (512 bytes, -p) 8
POSIX-beskedkøer (bytes, -q) 819200
Realtidsprioritet (-r) 0
Stakstørrelse (kbytes, -s) 8192
CPU-tid (sekunder, -t) ubegrænset
MAX brugerprocesser (-u) 7271
Virtuel hukommelse (kbytes, -v) ubegrænset
fillås (-x) ubegrænsede

Hvis kernens filstørrelse er 0, kan kernefilen ikke genereres, og vi skal sætte den.

ulimit -c unlimited, det betyder, at størrelsen på kernefilen er ubegrænset


Opsætning fuldført, huskGenstart php-fpm-tjenesten, kommandoen er som følger:



Tjek fejlloggen igen som følger:

[23-maj-2020 14:39:14] ADVARSEL: [pool www] barn 2220 forlod signal 11 (SIGSEGV - kerne dumpet) efter 7,255225 sekunder fra start
[23-maj-2020 14:39:14] MEDDELELSE: [pool www] barn 2231 startet

Hvis loggen indeholder ordene "SIGSEGV – core dumped", betyder det, at rore-filen er blevet genereret med succes.

Kernefilen vil blive genereret under websitets mappe, hvis du ikke ved det, kan du også finde kernefilen med følgende kommando:


Adressen, der genereres af kernen på min server, er: /alidata/www/itsvse_web/core.2220

Installer gdb

Kommandoen er som følger:



GDB fejlfinding php-fpm

Forbered .gdbinit-filen

.gdbinit-filen ligger under PHP-kildekoden, og den skal være konsistent med den php-version, du kører!

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

Downloadadresse for den nyeste php-version af .gdbinit-filen:

Hyperlink-login er synlig.

GDB for at åbne kernefilen

I kernefilmappen skal du køre følgende kommando:

[root@o itsvse_web]# GDB php-fpm -c core.2220
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Ophavsret (C) 2013 Free Software Foundation, Inc.
Licens GPLv3+: GNU GPL version 3 eller senere <Hyperlink-login er synlig.
Dette er fri software: du er fri til at ændre og distribuere den.
Der er INGEN GARANTI, i det omfang loven tillader det.  Skriv "vis kopiering"
og "vis garanti" for detaljer.
Denne GDB var konfigureret som "x86_64-redhat-linux-gnu".
For instruktioner til fejlrapportering, se:
<Hyperlink-login er synlig.
At læse symboler fra /alidata/server/php-5.5.7/sbin/php-fpm... Færdig.
[Ny LWP 2220]
[Trådfejlfinding ved hjælp af libthread_db aktiveret]
Brug af værtsbiblioteket libthread_db "/lib64/libthread_db.so.1".
Core blev genereret af 'php-fpm: pool www '.
Programmet afsluttes med signal 11, segmenteringsfejl.
#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        {
Mangler separate debug-infos, brug: 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 noget i retning af følgende ord:

Core blev genereret af 'php-fpm: pool www '.
Programmet afsluttes med signal 11, segmenteringsfejl.

bt(backtrace): Viser kaldstakken

(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 (tilstand=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



Gennemgå exit-tråden


Introduktion af .gdbinit (gdb command scripting) leveret i PHP-kildekoden



Se på zbacktrace- og variabelværdierne

(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) 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)
Opløsning

Jeg så faktisk ingen fejl, men det var tydeligt ud fra logfilerne, at der var et problem med mobiladgangen, og efter test var det faktisk kun en 502-fejl i tilfælde af mobiladgang.

Da der ikke er nogen mobilversion i baggrunden, ændrede jeg direkte admin.php kildekoden og tilføjede følgende kode på første linje:

På denne måde vil programmet altid modtage en adgangsanmodning fra PC-browseren, og det vil ikke gå igennem den logiske kode fra mobiltelefonversionen, løst!




Tidligere:Nginx tilpasser 404-fejlsiden og returnerer en 200-statuskodeløsning
Næste:Grundlæggende brug af [ngKlasse] og [ngStil] i Angular
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com