AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 389956
Accepted
Raj
Raj
Asked: 2012-05-18 01:41:09 +0800 CST2012-05-18 01:41:09 +0800 CST 2012-05-18 01:41:09 +0800 CST

具有 mod_php 高内存利用率的 Apache

  • 772

我们使用 mod_php 和 mysql 在 Apache 上部署了 Magento 应用程序。我观察到有时 apache 服务器开始消耗高内存,这会导致内存交换并导致服务器上的高负载。每当 apache 服务器上有高负载时,导致高负载的 apache 进程在 mysql 端处于睡眠模式,在客户端处于 CLOSE_WAIT 状态。感谢您提供任何帮助来解决此问题。

mysql apache-2.2 magento mod-php haproxy
  • 3 3 个回答
  • 2313 Views

3 个回答

  • Voted
  1. Best Answer
    Ben Lessani
    2012-06-21T12:21:50+08:002012-06-21T12:21:50+08:00

    @raj 您可能会发现进程处于 S 状态,因为它们正在等待受 I/O 约束的另一个进程(处于 D 状态),即。为机器停止交换。

    所以关键是要解决两个关键问题,标准内存分配和内存承诺。

    运行 Magento 时,只需将 PHP 最大内存限制设置得太高,就很容易在 RAM 上大量过度提交。在正常情况下,它不会产生任何不良影响,但当应用程序尝试使用该内存时,它几乎会立即进入交换状态(如果您用完了 RAM)。

    然后,您可能会发现 Apache 不是内存使用的主要问题,而 MySQL 更有可能是罪魁祸首。

    您没有提到您的服务器规格或商店的任何具体细节,因此无法提供准确的建议。但简单地修改您的 Apache 和 MySQL 配置将是一个简单的起点。减少 Apache 线程数、MySQL 连接数、分配的内存承诺。然后开始使用像 Munin 这样的工具绘制图表,以实际关联流量、线程、CPU 使用率和内存使用率。如果不这样做,你就是在盲目工作。

    但是我建议您不要再四处寻找 netstat,因为您离诊断 TCP 状态还有很长的路要走;你需要从头开始。

    • 2
  2. symcbean
    2012-05-18T03:45:58+08:002012-05-18T03:45:58+08:00

    去阅读一些关于 HTTP 调优和性能管理主题的好书(真的——你不太可能在这里得到答案)。

    这会导致内存交换

    那么你的服务器配置不当 - 网络服务器永远不应该开始交换。应用通常的 apache 调整程序并减少 php 最大内存。

    每当 apache 服务器上有高负载时,导致高负载的 apache 进程在 mysql 端处于睡眠模式

    嗯?根据定义,休眠进程不会增加负载。mhysql到底是什么?

    • 1
  3. DukeLion
    2012-05-18T02:01:54+08:002012-05-18T02:01:54+08:00

    使用此脚本:http ://saiweb.co.uk/linux/apache/bash%20script/linux-the-sysadmin-script-part-3/

    确定您的 apache 进程使用了​​多少内存。

    然后将 apache 配置中的 MaxClients 限制为无需交换即可运行的进程数量。这样的话当问题出现的时候你的LA就不高了,你就可以找到问题的真正根源。这是我的脚本版本(上面的链接现在似乎已损坏)

    #!/bin/bash
           if [ -z "$1" ]; then
                    echo "Usage: sysadmin appmem app_name i.e. (sysadmin appmem apache)";
            else
                    RRES=(`ps aux | grep "$1" | grep -v 'grep' | grep -v "$0" | awk '{print $6}'`);
                    VRES=(`ps aux | grep "$1" | grep -v 'grep' | grep -v "$0" | awk '{print $5}'`);
                    COUNT=0;
                    VMEM=0;
                    RMEM=0;
                    for RSS in ${RRES[@]}
                    do
                            RMEM=$(($RSS+$RMEM));
                    done;
                    for VIRT in ${VRES[@]}
                    do
                            VMEM=$(($VIRT+$VMEM));
                            COUNT=$(($COUNT+1));
                    done;
                    VMEM=$(($VMEM/$COUNT));
                    VMEM=$(($VMEM/1024));
                    RMEM=$(($RMEM/1024));
                    echo -e "$YELLOW ----- MEMORY USAGE REPORT FOR '$1' ----- $CLEAR";
                    echo "PID Count: $COUNT";
                    echo "Shared Mem usage: $VMEM MB";
                    echo "Total Resident Set Size: $RMEM MB";
                    echo "Mem/PID: $(($RMEM/$COUNT)) MB";
            fi
    
    • 0

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve