国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

【已解決】寫安裝引導(dǎo)時(shí)很奇怪的502或無響應(yīng)問題,CPU占用會(huì)高

沉夢(mèng)

問題描述

之前測(cè)試各種業(yè)務(wù)時(shí)都是正常的,偏偏今天在寫程序安裝引導(dǎo)時(shí)遇到502或者直接無響應(yīng)問題,不知道是我哪里代碼的問題,說一下我遇到的情況,麻煩大佬們看看哪里導(dǎo)致的!
1.沒有任何報(bào)錯(cuò)信息(可能是Nginx代理轉(zhuǎn)發(fā)的問題,但我用的免費(fèi)版寶塔,沒有防火墻)
2.一樣的代碼,我之前的thinkphp6.1程序雖然響應(yīng)慢一點(diǎn),但不會(huì)出現(xiàn)這個(gè)問題(最多SQL語句寫入錯(cuò)誤)
3.其他業(yè)務(wù)操作都是正常,只有安裝執(zhí)行SQL的時(shí)候會(huì)出現(xiàn), CPU的負(fù)載也會(huì)被拉起來
4.無響應(yīng)或者502一般是3、4次到20來次都出現(xiàn)過沒有規(guī)律,不像是SQL語句錯(cuò)誤導(dǎo)致

502報(bào)錯(cuò)截圖
截圖

無響應(yīng)截圖一
截圖
無響應(yīng)截圖二
截圖

命令行調(diào)試截圖
截圖

Webman運(yùn)行狀態(tài)
截圖

服務(wù)器負(fù)載占用截圖
截圖

程序代碼

    /**
     *  執(zhí)行安裝控制器主方法 502或者無響應(yīng)就是這個(gè)請(qǐng)求出現(xiàn)的
     */
   public function onInstall()
    {

        $dbOptions = Cache::get('install.db');
        if (!is_array($dbOptions)) {
            $dbOptions = input('post.database');
        }

        $sql_step = input('post.sql_step/d', 0);

        // 鏈接數(shù)據(jù)庫
        try {
            $this->getPdoDb($dbOptions);
        } catch (\Throwable $th) {
            // 捕獲DbException 此處注意DbException只能用Exception捕獲
            $code = $th->getCode();
            if ($code == 2002) {
                return $this->error('數(shù)據(jù)庫鏈接錯(cuò)誤, 數(shù)據(jù)庫地址填寫錯(cuò)誤');
            } elseif ($code == 1045) {
                return $this->error('數(shù)據(jù)庫鏈接錯(cuò)誤, 賬號(hào)或密碼錯(cuò)誤');
            } elseif ($code == 1049) {
                return $this->error('數(shù)據(jù)庫鏈接錯(cuò)誤, 數(shù)據(jù)庫名稱對(duì)應(yīng)的數(shù)據(jù)庫不存在');
            }
            return $this->error('數(shù)據(jù)庫鏈接錯(cuò)誤,' . $th->getMessage(), null, [
                'list'   => [],
                'log'    => [],
                'ok'     => 0,
                'result' => ['sql_step' => $sql_step++],
            ]);
        }

        $this->pdo = null;

        // 執(zhí)行數(shù)據(jù)庫寫入
        $sqlFile = dirname(__DIR__) . '/data/install.sql';
        if (!is_file($sqlFile)) {
            return $this->error('數(shù)據(jù)庫安裝文件[app/' . module() . '/data/install.sql]不存在,請(qǐng)檢查程序完整性', '', ['ok' => 0, 'list' => [], 'log' => [], 'sqlFile' => str_replace(root_path(), '', $sqlFile)]);
        }

        $list = $log = [];
        for ($i = 0; $i < $this->write_num; $i++) {
            $sql = $this->getInstallSql(++$sql_step, $dbOptions['dbprefix'] ?? 'cmypro_');
            $res = $this->doInstallSql($sql_step, $sql);
            if ($res['empty'] != 1) {
                $list[] = $res;
                $log[]  = $this->resMsg($res, $res['success'] === true);
            }
        }

        if ($sql_step >= $this->sql_num) {
            // 執(zhí)行到最后一步,更新管理員和配置信息等
            $data   = Cache::get('install.data');
            $res    = $this->updateAdmin($data);
            $list[] = $res;
            $log[]  = $this->resMsg($res, $res['success'] === true);

            $res    = $this->updateWebsite($data);
            $list[] = $res;
            $log[]  = $this->resMsg($res, $res['success'] === true);
            $this->updateAdminPath();

            $res    = $this->insertVersionInfo();
            $list[] = $res;
            $log[]  = $this->resMsg($res, $res['success'] === true);
            return $this->success('共' . $this->sql_num . '條, 數(shù)據(jù)寫入成功', null, ['ok' => 1, 'list' => $list, 'log' => $log, 'sql_num' => $this->sql_num, 'sql_all' => $this->sql_all]);
        }

        return $this->success('當(dāng)前執(zhí)行完畢', '', ['list' => $list, 'log' => $log, 'ok' => 0, 'result' => $res, 'sql_step' => $sql_step, 'sql_num' => $this->sql_num, 'write_num' => $this->write_num, 'next_array' =>  array_slice(self::$sql_array, ($sql_step > 0 ? $sql_step : 0), $this->write_num)]);
    }
/**
     * 獲取當(dāng)前執(zhí)行語句
     *
     * @param integer $sql_step 當(dāng)前步驟
     * @param string $prefix  數(shù)據(jù)表前綴
     * @return string
     */
    private function getInstallSql($sql_step = 0, $prefix = 'cmypro')
    {
        static $sql_array = null;

        $file          = dirname(__DIR__) . '/data/install.sql';
        if (empty($sql_array) || filemtime($file) > $this->sqlFileMtime) {
            $sql           = file_get_contents($file);
            $this->sqlFileMtime = filemtime($file);
            $this->sql_all = $sql = preg_replace('/;[\s]+\n/', ";\n", $sql);
            $sql_array     = explode(";\n", $sql);
            $sql_array  = array_filter($sql_array, function ($value) {
                return trim($value) != '';
            });

            self::$sql_array =  $sql_array = array_map(function ($value) use ($prefix) {
                return $this->sql_split($value, $prefix);
            }, $sql_array);
        }

        $this->sql_num = count($sql_array);
        if (isset($sql_array[$sql_step])) {
            return $sql_array[$sql_step];
        }
        return '';
    }
/**
     * SQL語句處理
     *
     * @param string $sql
     * @param string $prefix
     * @return string
     */
    private function sql_split($sql, $prefix): string
    {

        try {
            // 統(tǒng)一換行符為\n
            $sql = str_replace(["\r\n", "\r"], "\n", $sql);

            // 保留MySQL條件注釋(如/*!50001 ... */)
            $sql = preg_replace_callback('/\/\*!\d{5}.*?\*\//s', function ($matches) {
                return str_replace("\n", " ", $matches[0]); // 防止換行破壞注釋結(jié)構(gòu)
            }, $sql);

            // 刪除普通注釋(改進(jìn)正則避免破壞條件注釋)
            $sql = preg_replace([
                '/\/\*.*?\*\//s',           // /*...*/
                '/\s*-- .*$/m',             // -- 注釋
                '/\s*#.*$/m'                // # 注釋
            ], ['', "\n", "\n"], $sql);

            // 安全替換表前綴(處理特殊字符)
            foreach ($this->table_prefix as $key => $table_prefix) {
                $oldPrefix = preg_quote($table_prefix, '/');
                $sql = preg_replace([
                    "/`{$oldPrefix}([a-zA-Z0-9_]+)`/",
                    "/(\s){$oldPrefix}([a-zA-Z0-9_]+)(\s)/"
                ], [
                    '`' . $prefix . '$1`',
                    '$1' . $prefix . '$2$3'
                ], $sql);
            }

            // 處理存儲(chǔ)引擎和字符集(更精確的匹配)
            $sql = preg_replace([
                '/\bTYPE\s*=\s*(InnoDB|MyISAM|MEMORY)\b/i',
                '/\s*DEFAULT\s+CHARSET\s*=\s*[a-zA-Z0-9_]+/i'
            ], [
                'ENGINE=$1',
                ' DEFAULT CHARSET=utf8mb4'
            ], $sql);

            // 清理多余空白(保留換行用于語句分割)
            $sql = preg_replace([
                '/\n{3,}/',      // 多個(gè)空行變單行
                '/\s{2,}/',      // 多個(gè)空格變單空格
                '/\s*;\s*$/m'    // 行尾分號(hào)清理
            ], [
                "\n\n",
                ' ',
                ';'
            ], $sql);
        } catch (\Throwable $th) {
            $this->outJson(['msg' => $th->getMessage(), 'sql' => $sql]);
        }
        return $sql;
    }
/**
     * 鏈接Pdo數(shù)據(jù)庫檢查數(shù)據(jù)庫信息是否正確
     *
     * @param array $dbOptions 數(shù)據(jù)庫配置信息
     * @return \PDO
     */
    private function getPdoDb(array $dbOptions = [])
    {

        $dbhost = $dbOptions['dbhost'] ?? '127.0.0.1';
        $dbname = $dbOptions['dbname'] ?? 'root';
        $dbuser = $dbOptions['dbuser'] ?? 'root';
        $dbpwd  = $dbOptions['dbpwd'] ?? '123456';
        $dbport = $dbOptions['dbport'] ?? '3306';

        // 數(shù)據(jù)庫類型
        $type   = config('think-orm.default', 'mysql');
        $pdo    = null;
        $option = $type . ":host=" . $dbhost;
        if ($dbport) {
            $option .= ";port=" . $dbport;
        }
        if ($dbname) {
            $option .= ";dbname={$dbname}";
        }
        // PDO配置
        $pdoAttr = [
            //設(shè)置數(shù)據(jù)庫字段保持不變
            PDO::ATTR_CASE                     => PDO::CASE_NATURAL,
            //關(guān)閉pdo模擬功能
            PDO::ATTR_EMULATE_PREPARES         => false,
            //開啟緩存查詢
            PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
        ];
        $this->pdo = new PDO($option, $dbuser, $dbpwd, $pdoAttr);
        $this->pdo->exec("set names 'utf8mb4'");
        return $pdo;
    }
/**
     * 執(zhí)行寫入SQL
     *
     * @param integer $sql_step
     * @param string $sql
     * @return array
     */
    private function doInstallSql($sql_step = 0, $sql = '')
    {

        if (trim($sql) == '') {
            return [
                'sql_step' => $sql_step,
                'sql'      => $sql,
                'empty'    => 1,
                'title'    => '無效操作',
                'content'  => 'SQL語句為空! ',
                'sql_num'  => $this->sql_num - 1,
                'success'  => false,
            ];
        }

        $tableName = '';
        if (preg_match('/TABLE IF NOT EXISTS `([\w]+)`/i', $sql, $match1)) {
            $tableName = $match1[1];
        }

        $tableTitle = '';
        if (preg_match("/CHARSET=utf8mb4 COMMENT='(.*?)'/i", $sql, $match2)) {
            $tableTitle = $match2[1];
        }

        if (!$tableName && !$tableTitle) {
            if (preg_match("/insert into `([\w]+)`/i", $sql, $match3)) {
                $tableName = $match3[1];
                $type      = 'insert';
                // 說明是insert語句
                $ret = [
                    'sql_step' => $sql_step,
                    'sql'      => $sql,
                    'title'    => '插入到表>>' . ($tableName ?: '未知'),
                    'content'  => '',
                    'sql_num'  => $this->sql_num - 1,
                    'success'  => false,
                ];
            } else {
                $type = 'insert';
                $ret  = [
                    'sql_step' => $sql_step,
                    'sql'      => $sql,
                    'title'    => '其他寫入',
                    'content'  => '',
                    'sql_num'  => $this->sql_num - 1,
                    'success'  => false,
                ];
            }
        } else {
            $type = 'table';
            $ret  = [
                'sql_step' => $sql_step,
                'sql'      => $sql,
                'title'    => '創(chuàng)建表>>' . ($tableTitle ?: $tableName),
                'content'  => '',
                'sql_num'  => $this->sql_num - 1,
                'success'  => false,
            ];
        }
        try {
            $ret['success'] = true;
            $ret['content'] = $type == 'table' ? '創(chuàng)建成功' : '插入成功';
            \support\think\Db::query($sql);
            // $this->pdo->query($sql);
        } catch (\Throwable $th) {
            // 捕獲DbException 此處注意DbException只能用\Exception捕獲
            $ret['success'] = false;
            if ($type == 'table') {
                $ret['content'] = '創(chuàng)建失敗,' . $th->getMessage();
            } else {
                $ret['content'] = '插入失敗,' . $th->getMessage();
            }
        }
        $ret['empty'] = 0;
        return $ret;
    }

報(bào)錯(cuò)信息

沒有報(bào)錯(cuò)信息,直接返回502或者無響應(yīng)

截圖報(bào)錯(cuò)信息里報(bào)錯(cuò)文件相關(guān)代碼

沒有報(bào)錯(cuò)信息,直接返回502或者無響應(yīng)

操作系統(tǒng)及workerman/webman等框架組件具體版本

webman版本:v2.1.2
swoole版本:v5.1.4
Nginx版本: 1.26.1
think-orm: webman/think-orm最新版
用的老大的教程,那個(gè)寶塔安裝的Nginx轉(zhuǎn)發(fā)模式

 # Ws服務(wù)
  location ^~ /sysgateway {
      proxy_pass http://127.0.0.1:23111;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_connect_timeout 300s;
      proxy_send_timeout 300s;
      proxy_read_timeout 300s;
      break;
  }
  # 將請(qǐng)求轉(zhuǎn)發(fā)到webman
  location ^~ / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      if (!-f $request_filename){
          proxy_pass http://127.0.0.1:8787;
      }
  }

  # 拒絕訪問 plugins 目錄
  location ^~ /plugins {
    return 404;
  }

  # 拒絕訪問所有以 .php 結(jié)尾的文件
  location ~ $ {
      return 404;
  }

  # 允許訪問 .well-known 目錄
  location ~ ^/.well-known/ {
    allow all;
  }

  # 拒絕訪問所有以 . 開頭的文件或目錄
  location ~ /. {
      return 404;
  }
489 1 0
1個(gè)回答

walkor 打賞

運(yùn)行
strace -ttp cpu高的進(jìn)程pid
看下進(jìn)程在干什么

  • 沉夢(mèng) 2025-04-07

    [root@ser3167469738 ~]# strace -ttp 28790
    strace: Process 28790 attached
    17:44:17.525174 epoll_wait(4,
    然后沒了

  • 沉夢(mèng) 2025-04-07

    我再次執(zhí)行請(qǐng)求后這下有了
    strace -ttp 32093
    strace: Process 32093 attached
    18:04:04.292868 epoll_wait(4, 0x2508720, 32, -1) = -1 EINTR (Interrupted system call)
    18:04:16.109971 --- SIGUSR1 {si_signo=SIGUSR1, si_code=SI_USER, si_pid=30956, si_uid=0} ---
    18:04:16.110067 sendto(5, "\n", 1, 0, NULL, 0) = 1
    18:04:16.110201 rt_sigreturn({mask=[]}) = -1 EINTR (Interrupted system call)
    18:04:16.110273 epoll_wait(4, [{EPOLLIN, {u32=6, u64=6}}], 32, -1) = 1
    18:04:16.110335 recvfrom(6, "\n", 1024, 0, NULL, NULL) = 1
    18:04:16.110402 recvfrom(6, 0x7f50f57e1ac0, 1024, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
    18:04:16.110697 epoll_wait(4, [], 32, 10) = 0
    18:04:16.125669 epoll_wait(4, [], 32, 0) = 0
    18:04:16.125912 close(3) = 0
    18:04:16.129317 munmap(0x7f51053aa000, 4096) = 0
    18:04:16.130086 rt_sigaction(SIGALRM, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.130179 rt_sigprocmask(SIG_UNBLOCK, [ALRM], NULL, 8) = 0
    18:04:16.130227 rt_sigaction(SIGINT, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.130278 rt_sigprocmask(SIG_UNBLOCK, [INT], NULL, 8) = 0
    18:04:16.130333 rt_sigaction(SIGTERM, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.130389 rt_sigprocmask(SIG_UNBLOCK, [TERM], NULL, 8) = 0
    18:04:16.130434 rt_sigaction(SIGHUP, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.130484 rt_sigprocmask(SIG_UNBLOCK, [HUP], NULL, 8) = 0
    18:04:16.130529 rt_sigaction(SIGTSTP, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.130579 rt_sigprocmask(SIG_UNBLOCK, [TSTP], NULL, 8) = 0
    18:04:16.130624 rt_sigaction(SIGQUIT, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.130686 rt_sigprocmask(SIG_UNBLOCK, [QUIT], NULL, 8) = 0
    18:04:16.130732 rt_sigaction(SIGUSR1, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.130782 rt_sigprocmask(SIG_UNBLOCK, [USR1], NULL, 8) = 0
    18:04:16.130827 rt_sigaction(SIGUSR2, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.130888 rt_sigprocmask(SIG_UNBLOCK, [USR2], NULL, 8) = 0
    18:04:16.130947 rt_sigaction(SIGABRT, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.130998 rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
    18:04:16.131053 rt_sigaction(SIGIO, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.131104 rt_sigprocmask(SIG_UNBLOCK, [IO], NULL, 8) = 0
    18:04:16.131149 rt_sigaction(SIGPIPE, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.131198 rt_sigprocmask(SIG_UNBLOCK, [PIPE], NULL, 8) = 0
    18:04:16.131465 close(0) = 0
    18:04:16.131614 rt_sigaction(SIGIO, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.131692 rt_sigaction(SIGABRT, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.131744 rt_sigaction(SIGUSR2, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.131795 rt_sigaction(SIGHUP, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.131854 rt_sigaction(SIGINT, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.131916 rt_sigaction(SIGTERM, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.131975 rt_sigaction(SIGTSTP, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.132025 rt_sigaction(SIGQUIT, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.132074 rt_sigaction(SIGUSR1, {sa_handler=0xc5f366, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_INTERRUPT|SA_SIGINFO, sa_restorer=0x7f50ffa2e400}, NULL, 8) = 0
    18:04:16.132127 epoll_ctl(4, EPOLL_CTL_DEL, 6, 0x7ffd7afe6800) = 0
    18:04:16.132179 close(5) = 0
    18:04:16.132228 close(6) = 0
    18:04:16.132274 close(4) = 0
    18:04:16.137123 munmap(0x7f50f2a00000, 2621440) = 0
    18:04:16.141725 munmap(0x7f50f3400000, 2097152) = 0
    18:04:16.141841 munmap(0x7f50f3800000, 2097152) = 0
    18:04:16.141935 munmap(0x7f50f3600000, 2097152) = 0
    18:04:16.142031 munmap(0x7f50f2e00000, 2097152) = 0
    18:04:16.142109 munmap(0x7f50f3000000, 2097152) = 0
    18:04:16.142185 munmap(0x7f50f3a00000, 2097152) = 0
    18:04:16.142352 munmap(0x7f50f3200000, 2097152) = 0
    18:04:16.146071 munmap(0x7f50f5c08000, 2262696) = 0
    18:04:16.146167 munmap(0x7f50f5a02000, 2118296) = 0
    18:04:16.146252 munmap(0x7f50f57e2000, 2226024) = 0
    18:04:16.146335 munmap(0x7f50f55b7000, 2272984) = 0
    18:04:16.146423 munmap(0x7f50f5e31000, 2706920) = 0
    18:04:16.146511 munmap(0x7f50f60c6000, 2159504) = 0
    18:04:16.146583 munmap(0x7f50f62d6000, 9289816) = 0
    18:04:16.146733 munmap(0x7f50f86ab000, 2168472) = 0
    18:04:16.146824 munmap(0x7f50f8492000, 2196680) = 0
    18:04:16.148325 munmap(0x7f5105315000, 196608) = 0
    18:04:16.176576 munmap(0x7f50f2200000, 2097152) = 0
    18:04:16.187702 munmap(0x7f50f2400000, 2097152) = 0
    18:04:16.198696 munmap(0x7f50f2800000, 2097152) = 0
    18:04:16.199213 munmap(0x7f50f3c00000, 2097152) = 0
    18:04:16.199302 munmap(0x7f50f2600000, 2097152) = 0
    18:04:16.210697 munmap(0x7f50f4400000, 2097152) = 0
    18:04:16.211137 munmap(0x7f50f2000000, 2097152) = 0
    18:04:16.211394 munmap(0x7f50fee00000, 2097152) = 0
    18:04:16.212485 munmap(0x7f5105223000, 659456) = 0
    18:04:16.212574 munmap(0x7f510536e000, 135168) = 0
    18:04:16.213715 exit_group(0) = ?
    18:04:16.215678 +++ exited with 0 +++

  • 沉夢(mèng) 2025-04-07

    老大我找到問題了,我安裝引導(dǎo)需要寫入數(shù)據(jù)庫信息,更新了.env文件,然后webman調(diào)試模式下會(huì)監(jiān)聽文件并重啟進(jìn)程,然后我這個(gè)情況剛好撞上了,不過我想問的是為啥重啟進(jìn)程后第一個(gè)請(qǐng)求會(huì)沒有響應(yīng)或者出現(xiàn)502,是因?yàn)镹ginx轉(zhuǎn)發(fā)的問題么

  • walkor 2025-04-07

    可能是因?yàn)檎?qǐng)求沒完成進(jìn)程重啟了導(dǎo)致,正常情況下進(jìn)程會(huì)等待業(yè)務(wù)處理完畢后執(zhí)行退出,但是有一些特別情況,例如請(qǐng)求很慢達(dá)到限定值2秒(可通過Worker::$stopTimeout=10更改)時(shí)進(jìn)程被強(qiáng)行kill掉。還有使用了協(xié)程時(shí)因?yàn)檎麄€(gè)進(jìn)程是非阻塞的,收到信號(hào)后會(huì)立刻處理,執(zhí)行退出,你的情況可能是用了協(xié)程導(dǎo)致。

    另外代碼可以控制文件更新reload時(shí)機(jī),

    use app\process\Monitor;
    // 讓monitor暫停監(jiān)聽文件更新
    Monitor::pause();
    // 更新所有文件
    // 恢復(fù)監(jiān)聽
    Monitor::resume();

    如果是要更新多個(gè)文件或者需要選擇reload時(shí)機(jī)可以通過上面代碼控制。

  • 沉夢(mèng) 2025-04-07

    好的,謝謝老大

??