文章851
标签121
分类10

Mac brew 代替 apt-get , yum, rpm 安装brew图形界面

十一在家 研究 mac 下 docker , 困难重重呀..
装一个 php+swoole 的容器 结果内部缺少很多扩展, 重新源码编译一个又缺少了很多基础包.
正常我就 yum 批量装了; brew 着实费劲 各种限制 不允许........ 不说了 百度一下装个 brew 图形界面

brew cask install cakebrew

如果不能下载直接上官网下载dmg包进行安装

MySQL 实时查看性能的技巧

在数据库管理中,实时监控 MySQL 的性能是确保系统高效运行的关键。通过观察性能指标,可以及时发现并解决性能瓶颈,确保数据库的稳定性和响应速度。本文将介绍一些实用的方法和工具,帮助你实时查看 MySQL 的性能。

为什么监控 MySQL 性能?

  • 性能优化: 通过监控性能指标,可以识别瓶颈并优化查询。
  • 资源管理: 了解资源使用情况,合理分配服务器资源。
  • 故障排查: 实时监控可以帮助迅速定位问题,减少停机时间。

实时查看性能的工具

1. MySQL 命令行工具

SHOW STATUS

使用 SHOW STATUS 命令可以查看 MySQL 服务器的状态变量,包括连接数、查询数、慢查询等信息。

SHOW GLOBAL STATUS;

SHOW PROCESSLIST

SHOW PROCESSLIST 命令可以查看当前正在执行的查询,包括执行时间和状态。这对于识别长时间运行的查询非常有用。

SHOW PROCESSLIST;

2. MySQL Performance Schema

Performance Schema 是 MySQL 内置的监控工具,提供了丰富的性能数据。可以通过以下查询获取实时的监控信息:

SELECT * FROM performance_schema.events_statements_current;

3. MySQL Enterprise Monitor

如果你使用的是 MySQL Enterprise Edition,可以利用 MySQL Enterprise Monitor 提供的图形界面实时监控性能。它提供了丰富的监控指标和警报功能,可以帮助管理员及时发现问题。

使用 mysqladmin 工具

mysqladmin 是 MySQL 自带的命令行工具,可以用来查看服务器状态和性能指标。以下是一些常用命令:

查看服务器状态

mysqladmin -u root -p status

查看当前连接数

mysqladmin -u root -p processlist

使用第三方监控工具

1. Prometheus + Grafana

Prometheus 是一个开源监控系统,可以与 Grafana 集成以实现可视化。通过配置 MySQL Exporter,可以实时收集 MySQL 性能数据并通过 Grafana 展示。

2. Percona Monitoring and Management (PMM)

PMM 是 Percona 提供的一款开源监控工具,专门用于监控 MySQL 和 MongoDB。它提供了丰富的监控仪表板,能够实时显示数据库的性能指标。

性能指标分析

监控 MySQL 性能时,以下是一些关键指标需要关注:

  • 查询响应时间: 高响应时间可能表明存在性能瓶颈。
  • 连接数: 监控当前连接数,确保不会超过最大连接数限制。
  • 慢查询: 记录慢查询以进行后续优化。
  • 内存和 CPU 使用率: 了解资源消耗情况,确保系统稳定。

总结

实时监控 MySQL 性能是数据库管理的重要组成部分。通过使用内置命令、性能模式和第三方监控工具,可以有效地识别和解决性能瓶颈,确保数据库的高可用性和高性能。

参考资料

PHP 信号量关闭进程

今天修改写脚本需要用到信号量控制脚本
下面是信号量控制类

 <?php
     
 /**
  * Class Signal
  * 信号量
  */
 class Signal
 {
     private static $signal;
 
     private static $runing = true;
 
     /**
      * Signal constructor.
      * @throws
      */
     private function __construct()
     {
         if (PHP_SAPI != 'cli') {
             throw new \Exception('Must CLI Model');
         }
         static::pcntl_signal();
     }
 
     /**
      * 安装信号处理器 kill 2
      */
     private static function pcntl_signal()
     {
         // 三参数必须为false 缺省参数存在bug --disable-posix
         pcntl_signal(SIGINT, function () {
             self::$runing = false;
         }, false);
     }
 
     /**
      * 调用等待信号的处理器
      * @param $runing
      * @return bool
      */
     public static function dispatch()
     {
         self::init();
 
         pcntl_signal_dispatch();
 
         return self::$runing;
     }
 
     /**
      * @desc 初始
      * @return mixed
      * @throws
      *------------------------------------------------------
      */
     private static function init()
     {
         if (!isset(static::$signal)) {
             static::$signal = new self();
         }
 
         return static::$signal;
     }
 
 }

举个栗子:

public function test()
{
    do {
        foreach (range(0, 1000) as $v) {
            echo $v, PHP_EOL;
        }
        echo 'end------------', PHP_EOL;

    } while (Signal::dispatch());
}

嗯 对 原理就是接收到信号 然后终止循环 !

">