[踩坑] 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来进行监控和分析。下面是一种可能的方法:
- 确保已启用
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=1 或 3 后,系统无法保证 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服务的工作进程池已满,无法处理更多的请求或任务。当所有工作进程都在忙于处理请求时,新的请求将无法得到处理,从而导致该警告出现。
解决该问题的方法可以考虑以下几点:
- 增加工作进程数:可以通过增加Swoole服务的工作进程数来扩展处理能力。可以在Swoole的配置文件或代码中找到关于工作进程数的设置项,并适当增加工作进程的数量。
- 优化代码逻辑:检查Swoole服务中的代码逻辑,确保没有长时间阻塞的操作或耗时过长的任务。如果存在耗时操作,可以考虑使用异步或并发处理方式,以充分利用工作进程资源。
- 调整资源限制:检查服务器的资源限制,例如文件句柄数、内存限制等。确保这些限制不会导致工作进程无法创建或执行。
- 监控和调优:使用合适的监控工具来监视Swoole服务的性能指标,例如请求处理速度、工作进程状态等。根据监控结果进行调优,找出性能瓶颈并进行相应的优化。
以上是一些常见的解决方法,但具体的解决方案可能需要根据你的具体应用和环境来确定。建议查看Swoole文档和相关技术资源,以获取更详细的指导和建议。