php - 处于休眠状态的高 Mysql 连接 + 大量运行的 PHP 实例/Magento

标签 php mysql magento nginx process

更新 仍然在痛苦中......什么也没找到:( 老实说,我愿意向任何可以帮助我解决这个问题的人捐款,这越来越让人着迷了,哈哈。

在 Proxmox distrib 上,我有一个安装了 Debian 的虚拟机。 在这个 Debian 上:Nginx/PHP5-FPM/APC/Memcached 和 MySQL 正在运行大型 MAGENTO 多网站设置。

有时,(随机或上午 9 点左右取决于)服务器负载增加。 在这次偷看中我能看到的是:

  • HTOP 中的大量 PHP-FPM 实例
  • 大量 MySQL 连接,其中大部分处于休眠状态,“时刻”值很大,例如 180 或有时更多。

  • 服务器内存未满,free -h 告诉我内存不是这里的问题。

  • 来自访客的 TCP 连接不高,所以我认为流量也不是问题

看起来有些东西(我会说是一个 php 脚本)是由 cron 或访问者触发的(比如研究或其他东西),它需要很多时间来处理,可能会锁定一些MySQL 表并阻止其他进程运行,导致大规模卡住。

我正在努力找出导致此问题的原因,或者只是找到有效调试它的“方法”。

我已经尝试过的:

  • 使用 HTOP 跟踪一些 php 进程以查找 一些信息。这就是我如何发现 mysql 的进程有一些消息表明它无法连接到资源,因为它很忙。

  • 在/var/log/messages 和/var/log/syslog 中搜索信息,但没有找到任何相关信息。

  • 在/var/log/mysql 中搜索了一些错误日志,但一无所获。

  • 在/var/log/php5-fpm.log 中搜索并收到许多消息,表明进程在“LONG”时间段后以代码 3 退出(可能是进程试图获取 mysql 资源但从未获取它?)喜欢:

警告:[pool www] child 23839 在开始 1123.453563 秒后以代码 3 退出 甚至 : 警告:[pool www] child 29452 在开始 2471.593537 秒后退出信号 15 (SIGTERM)

  • 在 Nginx 网站的错误文件中搜索,发现多条消息表明由于我在 Nginx 配置文件中设置的 60 秒超时,访问者连接超时。

这是我的设置:

Nginx 网站的配置文件:

    location ~ \.php$ {
    if (!-e $request_filename) {
            rewrite / /index.php last;
    }

    try_files $uri =404;
    expires off;
    fastcgi_read_timeout 60s;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.*\.php)(/.*)?$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Nginx 主配置文件:

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    fastcgi_read_timeout 60;
    client_max_body_size 30M;

PHP-FPM 处于按需模式

default_socket_timeout = 60 mysql.connect_timeout = 60

PHP-FPM 池的配置文件

    pm=ondemand
    pm.max_children = 500
    pm.start_servers = 10
    pm.min_spare_servers = 5
    pm.max_spare_servers = 10
    pm.process_idle_timeout = 10s;
    pm.process_idle_timeout = 10s;
    pm.max_requests = 5000 (was thinking about reducing this value to force processes to respawn, if someone has experience with it, I'm interested in hearing it)

感谢您花时间阅读本文,如果需要,我会在这里更新内容。

问候 魔法

最佳答案

您是否检查了 crontab 和 Magento 中的 cronjobs 以确保这不是任何作业?

这种奇怪的服务器行为是否会降低您网站的速度?我不确定,但这也可能是 Slowloris DDos 攻击,其中打开了许多 HTTP 连接并且由于错误而没有关闭。也许我给了你一个提示。

关于php - 处于休眠状态的高 Mysql 连接 + 大量运行的 PHP 实例/Magento,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604228/

相关文章:

magento - 动态更改产品详细信息页面的布局/CSS

php - session_start() : Session data file is not created by your uid

php - Cake PHP 主题集成

php - 如何将数据插入到一个表中,其中表名是一个 php 变量,它会根据按钮的点击而变化?

javascript - 我可以使用 jQuery 动态执行 php 操作吗?

php - 星期几 Yii2 主动查询

html - Magento、图标包、CName 记录和 Cloudflare

php - 有条件地在 magento 布局中添加 block

mysql - 提取连续模式超过阈值的行

python - 数据未插入到 mySQL (MariaDB) 表中