文章851
标签121
分类10

[踩坑] Swoole 抛错 记录

近期遇到三个swoole 的抛错日志, 很头疼 有的有解释 有的并没有, 但总体也算是解决了问题.

[2023-11-21 19:44:02<.978122> #9118.2]  WARNING del (ERRNO 800): failed to delete events[430], it has already been removed

[2023-11-21 22:17:28<.225417> *19693.61] WARNING Worker_discard_data (ERRNO 1007): [2] ignore data[1272 bytes] received from session#15689

[2023-11-18 09:15:07 *22844.90] WARNING send_blocking(:206): send 40 bytes failed, Error: Resource temporarily unavailable[11]

查看 Mysql 8.0 一分钟内调用的最多的sql

要查看MySQL 8.0一分钟内调用最多的SQL语句,可以使用MySQL Performance Schema来进行监控和分析。下面是一种可能的方法:

  1. 确保已启用Performance Schema:在MySQL配置文件(通常是 /etc/my.cnf/etc/mysql/my.cnf)中,确保以下配置设置被启用:
   performance_schema = ON

Swoole WARNING Worker_discard_data (ERRNO 1007): [2] ignore data

Swoole WARNING Worker_discard_data (ERRNO 1007): [2] ignore data 常见于:

浏览器疯狂刷新页面 (还没加载完就刷掉了)
ab 压测到一半取消
wrk 基于时间的压测 (时间到了未完成的请求会被取消)
以上几种情况均属于正常现象,可以忽略,所以该错误的级别是 NOTICE

如由于其它情况无缘无故出现大量连接断开时,才需要注意

WARNING swWorker_discard_data (ERRNO 1007): [2] received the wrong data[21 bytes] from socket#75

WARNING Worker_discard_data (ERRNO 1007): [2] ignore data[5 bytes] received from session#2
Copy to clipboardErrorCopied

同样的,这个错误也表示连接已经关闭了,收到的数据会被丢弃。参考 discard_timeout_request

discard_timeout_request

丢弃已关闭链接的数据请求。【默认值:true

Swoole 在配置 dispatch_mode=13 后,系统无法保证 onConnect/onReceive/onClose 的顺序,因此可能会有一些请求数据在连接关闭后,才能到达 Worker 进程。

提示 :

discard_timeout_request 配置默认为 true,表示如果 worker 进程收到了已关闭连接的数据请求,将自动丢弃。
discard_timeout_request 如果设置为 false,表示无论连接是否关闭 Worker 进程都会处理数据请求。

Shell 扫描目录下文件, 格式化生成SQL分割文件.

[root@data table]# ls
20230717  20230725  20230802  20230810  20230818  20230826  20230903  20230911  20230919  20230927  20231005  20231013  20231021  20231029  20231106
20230718  20230726  20230803  20230811  20230819  20230827  20230904  20230912  20230920  20230928  20231006  20231014  20231022  20231030  20231107
20230719  20230727  20230804  20230812  20230820  20230828  20230905  20230913  20230921  20230929  20231007  20231015  20231023  20231031  20231108
20230720  20230728  20230805  20230813  20230821  20230829  20230906  20230914  20230922  20230930  20231008  20231016  20231024  20231101  20231109
20230721  20230729  20230806  20230814  20230822  20230830  20230907  20230915  20230923  20231001  20231009  20231017  20231025  20231102  20231110
20230722  20230730  20230807  20230815  20230823  20230831  20230908  20230916  20230924  20231002  20231010  20231018  20231026  20231103  20231111
#!/bin/bash

# 指定根目录路径
root_directory="/data/table"

# 遍历根目录下的目录
for directory in "$root_directory"/*/
do
    if [[ -d "$directory" ]]; then
        # 进入目录
        cd "$directory"

        # 获取当前目录路径
        current_path=$(pwd)

        # 获取当前目录名称
        current_directory=$(basename "$current_path")

        # 扫描目录下的文件并生成 SQL 输出
        cat table* | awk -F "," '{print $4" "$10" "int($46/1000)}' | sort -k 3 -n | awk '{print "("$1","$2","$3"),"}' > "/data/table/$current_directory.sql"

        echo "在目录 $directory 中生成 $current_directory.sql"

        # 返回上一级目录
        cd ..
    fi
done

Swoole 抛错 ; WARNING timer_callback (ERRNO 9007): No idle worker is available

根据提供的错误消息,这是一个关于Swoole服务的错误。错误消息中的WARNING timer_callback (ERRNO 9007): No idle worker is available表示没有空闲的工作进程可用。

这种情况通常发生在Swoole服务的工作进程池已满,无法处理更多的请求或任务。当所有工作进程都在忙于处理请求时,新的请求将无法得到处理,从而导致该警告出现。

解决该问题的方法可以考虑以下几点:

  1. 增加工作进程数:可以通过增加Swoole服务的工作进程数来扩展处理能力。可以在Swoole的配置文件或代码中找到关于工作进程数的设置项,并适当增加工作进程的数量。
  2. 优化代码逻辑:检查Swoole服务中的代码逻辑,确保没有长时间阻塞的操作或耗时过长的任务。如果存在耗时操作,可以考虑使用异步或并发处理方式,以充分利用工作进程资源。
  3. 调整资源限制:检查服务器的资源限制,例如文件句柄数、内存限制等。确保这些限制不会导致工作进程无法创建或执行。
  4. 监控和调优:使用合适的监控工具来监视Swoole服务的性能指标,例如请求处理速度、工作进程状态等。根据监控结果进行调优,找出性能瓶颈并进行相应的优化。

以上是一些常见的解决方法,但具体的解决方案可能需要根据你的具体应用和环境来确定。建议查看Swoole文档和相关技术资源,以获取更详细的指导和建议。

">