Mysql Delete 大量数据 kill 后 进程长时间 killed 回滚
诶 今天一早就办了个蠢事. 写了个行情收集的脚本.存到mysql中计划是保存3天的数据, 结果没有启动删除脚本....
数据量 9kw 找到脚本后执行了一下....也是醉了 10分钟啥动静都没有. 我就关掉脚本了.
通过下面方法查看 delete
mysql> select * from information_schema.`PROCESSLIST` where info is not null;
|ID| USER| HOST| DB| COMMAND| TIME| STATE| INFO|
|-|-|-|-|-|-|-|-|
|10845565| xx| xxx:xxx| xx-data |Query| 0| executing| select * from information_schema.PROCESSLIST where info is not null|
|10844901| xx| xxx:xxx| xx-data| Execute| 375| updating| DELETE FROM market_collection_history WHERE created < 1577068173|
观察到进程 kill ID 关掉进程
mysql> kill 10844901
|ID| USER| HOST| DB| COMMAND| TIME| STATE| INFO|
|-|-|-|-|-|-|-|-|
|10845565| xx| xxx:xxx| xx-data| Query| 0| executing| select * from information_schema.PROCESSLIST where info is not null|
|10844901| xx| xxx:xxx| xx-data| Killed| 642| query end|DELETE FROM collection_history WHERE created < 1577068173|
执行完 `Killed` 好久都不结束, 百度了一下 当执行大数据量 `update delete` 写操作了, kill 后回 回滚...... 时间长是应该的 不长是不应该的........
PHP的反射类 ReflectionClass、ReflectionMethod 使用实例
PHP的反射类 ReflectionClass、ReflectionMethod 使用实例
PHP 中的反射类(ReflectionClass)和反射方法(ReflectionMethod)是强大的工具,可以让我们在运行时获取类和方法的相关信息,包括属性、方法、注释等。本文将介绍如何使用 ReflectionClass 和 ReflectionMethod,并提供一些示例。
1. ReflectionClass
ReflectionClass 用于获取类的反射信息。下面是一个简单的示例,展示如何使用 ReflectionClass 获取类的名称和方法列表:
<?php
// 定义一个类
class MyClass {
public function method1() {}
protected function method2() {}
private function method3() {}
}
// 创建 ReflectionClass 实例
$reflectionClass = new ReflectionClass('MyClass');
// 获取类名
echo 'Class Name: ' . $reflectionClass->getName() . "\n";
// 获取类的所有方法
$methods = $reflectionClass->getMethods();
echo "Methods:\n";
foreach ($methods as $method) {
echo $method->getName() . "\n";
}
2. ReflectionMethod
ReflectionMethod 用于获取方法的反射信息。下面是一个示例,展示如何使用 ReflectionMethod 获取方法的名称、参数列表和注释:
<?php
// 定义一个类
class MyClass {
/**
* 方法示例
* @param string $name
* @return string
*/
public function greet($name) {
return "Hello, $name!";
}
}
// 创建 ReflectionClass 实例
$reflectionClass = new ReflectionClass('MyClass');
// 获取方法 greet 的反射信息
$reflectionMethod = $reflectionClass->getMethod('greet');
// 获取方法名
echo 'Method Name: ' . $reflectionMethod->getName() . "\n";
// 获取方法的参数列表
echo "Parameters:\n";
$parameters = $reflectionMethod->getParameters();
foreach ($parameters as $parameter) {
echo $parameter->getName() . "\n";
}
// 获取方法的注释
echo 'Doc Comment: ' . $reflectionMethod->getDocComment() . "\n";
文献引用
在学习和使用 PHP 的 ReflectionClass 和 ReflectionMethod 时,以下资源可能会提供帮助:
- PHP 官方文档:ReflectionClass
- PHP 官方文档:ReflectionMethod
这些资源提供了关于 ReflectionClass 和 ReflectionMethod 的详细信息、用法示例以及实用建议,有助于更好地理解和使用这些功能。
通过合理利用 PHP 的反射类 ReflectionClass 和反射方法 ReflectionMethod,我们可以在运行时获取类和方法的信息,为动态调用和处理提供了更大的灵活性和可能性。
通过本文的介绍和示例,读者可以更加深入地了解 PHP 的 ReflectionClass 和 ReflectionMethod,从而在实际项目中更加灵活地利用这些功能。
[踩坑] Swoole 4.2.11低版本不抛错 执行不同静态方法一定次数 进程异常退出 `PHP Deprecated: Non-static method `
很久之前运维同学通知我 线上服务器 产生大量 core.15.... 文件 磁盘快占满了 我没在意.
今天发现线上有个服务的否个进程运行出了问题.找了一下午问题. 都没找明白 .
想起每次找swoole官方回复都是 版本太低, 先升级到最新版本.
抱着试试看的心态. 升级swoole 到 4.4.12 在运行发现如下错误:
PHP Deprecated: Non-static method Controller\Test::func() should not be called statically in /data/application/QuantPlatform/script/src/Controller/Test.php on line 41
PHP Deprecated: Swoole\Timer::swoole_timer_tick() expects parameter 2 to be a valid callback, non-static method Controller\Test::func() should not be called statically in /data/application//script/src/Controller/Test.php on line 41
实际上就是我在使用 swoole_timer_tick 定时器时 2参数回调方法 是不是静态方法导致的问题.
core dump 可能也能找出问题所在 但 对我有学习成本.
下次再有bug 第一时间更新版本.
记录下现象:
- 定时器中调用非静态方法 无抛错
- 调用外部模型类或第三方类 前3次调用都没有问题.
- 调用第四个不同的类时 异常退出.
{"Worker Error":0,"pid":4236,"exitCode":0,"signal":11}
线上swoole 4.2.11 版本 无抛错 进程仅异常退出.
swoole 4.4.12 版本 抛错提示 Non-static method
Swoole v4.2.11 enable_coroutine=true 协程开启失败问题 记录
Swoole v4.2.11 enable_coroutine=true 协程开启失败问题记录
在使用 Swoole v4.2.11 版本时,开启协程(enable_coroutine=true)可能会遇到一些问题,导致协程无法正常启动。本文将记录一些可能导致协程开启失败的常见问题以及解决方法。
1. PHP 版本兼容性问题
Swoole 在不同的 PHP 版本下可能存在兼容性问题,特别是在启用协程功能时。建议使用 Swoole 官方推荐的 PHP 版本,并确保 PHP 扩展和 Swoole 版本匹配。可以通过以下命令查看 PHP 版本:
php -v
2. Swoole 配置检查
确保在 Swoole 的配置文件中正确启用了协程。可以检查 swoole.ini 或 php.ini 文件中是否包含以下配置项:
[swoole]
enable_coroutine = true
3. 协程使用姿势不正确
在使用 Swoole 协程时,需要遵循一些特定的编程规范和注意事项。例如,协程中不能使用阻塞式的网络操作,否则可能导致协程无法正常执行。需要使用 Swoole 提供的非阻塞式 API 或者协程版本的 API。
4. 调试和日志记录
在遇到协程开启失败的问题时,可以使用 Swoole 提供的调试工具和日志记录功能来定位问题。可以通过设置 Swoole 的日志级别为 debug,并查看日志文件来了解协程启动时的错误信息。
[swoole]
log_level = debug
文献引用
在解决 Swoole 协程开启失败问题时,以下资源可能会提供帮助:
- Swoole 官方文档:Swoole Coroutine
- GitHub Issue:Coroutine not working on Swoole 4.2.11
这些资源提供了关于 Swoole 协程功能的详细信息、常见问题和解决方法,有助于更好地理解和使用 Swoole 的协程功能。
通过合理利用这些解决方法和工具,我们可以有效地解决 Swoole v4.2.11 enable_coroutine=true 协程开启失败的问题,确保协程功能能够正常运行。
通过记录和解决 Swoole 协程开启失败的问题,我们可以更好地应对在实际项目中遇到的协程相关的错误,提高应用程序的稳定性和性能。
php7.3-编译安装编译常见错误 libzip / off_t undefined / fatal error: zipconf.h
configure: error: Please reinstall the libzip distribution
解决方法:
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install
configure: error: off_t undefined; check your library configuration
解决方法 :
# 添加搜索路径到配置文件
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf
# 更新配置
ldconfig -v
/usr/local/include/zip.h:59:21: fatal error: zipconf.h: No such file or dire
解决方法:手动复制过去
cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h