V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
uiosun
V2EX  ›  PHP

各位, PHP 不用 CGI/FPM,而是 Apache 2.0 Handler,怎么提升并发?

  •  
  •   uiosun · 2020-07-28 14:35:03 +08:00 · 3309 次点击
    这是一个创建于 1329 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我司竟然还在用 Apache 2.0 Handler,运维不敢快速切换到 php-fpm,但同意让我改一些 Apache/PHP 的配置。

    项目月底就要上线,性能压力目前主要集中在并发上,所以我该怎么优化 Apache 2.0 Handler 呢?

    Ps:

    线上 32G 内存的服务器,觉得蛮大,本来准备直接调整 fpm 的生成方式、最大数量,结果猝不及防……

    查了查“Apache 2.0 Handler 并发”,毫无结果。

    24 条回复    2020-07-29 12:49:45 +08:00
    hbolive
        1
    hbolive  
       2020-07-28 14:45:41 +08:00
    你这不还没上线吗?为啥不让调。。
    NjcyNzMzNDQ3
        2
    NjcyNzMzNDQ3  
       2020-07-28 14:49:05 +08:00
    如果压力在 apache 哪里,没啥好办法,甩锅给运维吧。

    试试在 apche 前面套个 nginx,nginx 来做负载均衡带多个 apache,nginx 也可以开 proxy_cache 减少请求到户端的数量。
    dzdh
        3
    dzdh  
       2020-07-28 14:52:54 +08:00
    啥操作系统
    *nix 把 mpm 改成 event

    fpm 的话 php 可以安装两套,一套跟 apache 一起编译成 mod_php 另一套 php-fpm 。
    apache 支持 fcgi 和 mod_php 共存(其实本来就是两套) 然后前端 nginx 负载均衡一下 apache 权重 9 fpm 权重 1
    cbasil
        4
    cbasil  
       2020-07-28 15:04:29 +08:00
    没上线还不让调,怼死运维去
    mahone3297
        5
    mahone3297  
       2020-07-28 15:11:29 +08:00
    多开几个 apache,前端架一个 lb
    AngryPanda
        6
    AngryPanda  
       2020-07-28 15:12:44 +08:00
    堆机器了
    hasdream
        7
    hasdream  
       2020-07-28 15:13:22 +08:00
    linux 可以考虑把 apache 升到 2.4 然后使用 event 模式, 调优参考: http://mp.weixin.qq.com/s/eGGtBlXy0cYBFTO6AfF7dw
    wangritian
        8
    wangritian  
       2020-07-28 17:25:45 +08:00
    apache 设置成多进程+多线程的工作模式,php 开启 opcache,mysql 热点数据同步到 redis
    你还需要掌握一个压测工具,ab/webbench/wrk,一边优化一边确认结果
    Evilk
        9
    Evilk  
       2020-07-28 17:36:08 +08:00
    还没上线,为啥不让调?
    安装 fpm 很简单啊?
    sunny1688
        10
    sunny1688  
       2020-07-28 17:37:54 +08:00
    为啥是运维管这些?
    bin20060407
        11
    bin20060407  
       2020-07-28 17:55:06 +08:00
    以前用的 php-fpm 配合 Apache 2.4,以为可以撑得住,结果发现不管咋调,还是会报进程数不够,换成 nginx,就没问题了
    jifengg
        12
    jifengg  
       2020-07-28 18:00:32 +08:00
    既然有运维,那么就不要自己改!把你的需求提给运维。自己改了出问题是你的,而且你不也不熟悉么。运维坚持用 apache,那就只能提出需求让其解决了。
    真的,别最后吃力不讨好。
    JJstyle
        13
    JJstyle  
       2020-07-28 18:59:17 +08:00 via iPhone
    可以开多个 apache,前面用 nginx 转发一下
    uiosun
        14
    uiosun  
    OP
       2020-07-29 09:22:13 +08:00
    (运维也是个开发同事,只是他负责我们公司运维工作,公司对这块看得比较重,不允许其他人——譬如我,来动容器)

    前阵子带队把 ElementUI fork 到内网,又加了几个组件,领导可能是觉得做的不错,就突然说我来优化性能,我也很懵,但觉得没啥问题,反正我本职就是服务端。

    结果现在运维卡住 Docker,不允许我去搞大动作,我就很炸裂了……

    现在,我正在跟运维商量把一些配置文件暴露给我,让我可以修改和重启容器,如果这都做不到,那我就直接找领导,说“我做不了这个活儿,请另请高明”了。

    艾特各位大佬,嘿嘿。 @sunny1688 @jifengg @cbasil @hbolive @NjcyNzMzNDQ3
    uiosun
        15
    uiosun  
    OP
       2020-07-29 09:22:44 +08:00
    @dzdh CentOS,不能有大动作,只能在小配置上做些手脚……蓝受
    uiosun
        16
    uiosun  
    OP
       2020-07-29 09:24:06 +08:00
    @mahone3297 感谢大佬,负载均衡有的,Apache 我改了配置,提升了 30 % 的线程数量,看效果如何
    uiosun
        17
    uiosun  
    OP
       2020-07-29 09:25:33 +08:00
    @wangritian 跟你讲个笑话,我们作为一个预估上万用户同时做写入业务的站,没用 Redis……(无语泪先流,我来的时候这个站已经基本做完了)
    xw
        18
    xw  
       2020-07-29 09:50:26 +08:00
    写出实施方案,(预计)改前后效果对比,需要时间,反馈 /讨论决定是否 /如何处理
    julyclyde
        19
    julyclyde  
       2020-07-29 10:42:29 +08:00
    @dzdh 我记得 apache mod_php 似乎不支持 event 只能 mpm 啊?
    julyclyde
        20
    julyclyde  
       2020-07-29 10:43:12 +08:00
    @uiosun 预估上万人一般都达不到的,所以 redis 无所谓啦
    sunny1688
        21
    sunny1688  
       2020-07-29 11:26:11 +08:00
    @uiosun 正式环境用 docker ?怎么玩起来的?搞不懂,我只是在开发环境用一下 docker,正式服想不出怎么用,

    正式服安装 docker,mysql,redis,全部用 docker 容器?现在都上云了吧??求大佬解惑!
    uiosun
        22
    uiosun  
    OP
       2020-07-29 12:27:43 +08:00
    @sunny1688 外包公司,用容器不用担心客户服务器的环境问题,其实内部还是没有封装。

    之前在的公司自营产品比较强,可以跟你交流一下:

    将数据库、Redis 、MongoDB 、Nginx 等套件,分别封装,对容器外暴露接口,这样所有的容器,都会被监控 RAM 、CPU 、进程数等指标,如果发现哪些容器有问题,立刻可以定位、重启和解决。

    多容器(算是分布式?我没详细了解过),所以当某个环节的某部分容器宕机,其他容器可以正常执行业务,并不会出现“某个 Redis 容器崩了,整个缓存系统都崩了”的情况。
    uiosun
        23
    uiosun  
    OP
       2020-07-29 12:31:51 +08:00
    @sunny1688 上“云”的话,是不是可以进行“快速提高短时负载”?

    ——譬如 CPU 100%,赶紧买 1 倍 CPU 做临时扩容。

    如果是的话,容器更多可以作为一种快速定位故障环节、防止灾难扩大的解决方案,和云相辅相成。

    如果不是……emmmm 哈哈,还请指教,没太接触过云这个概念
    dzdh
        24
    dzdh  
       2020-07-29 12:49:45 +08:00
    @uiosun 上云是加机器。加 cpu 还是要重启中断服务的吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5960 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:26 · PVG 10:26 · LAX 19:26 · JFK 22:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.