LAMP 网站部分请求无法响应,求解 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Plumes
V2EX    问与答

LAMP 网站部分请求无法响应,求解

  •  
  •   Plumes 2015-12-23 11:33:19 +08:00 1663 次点击
    这是一个创建于 3582 天前的主题,其中的信息可能已经有所发展或是发生改变。
    网站环境是 LAMP ,是一个电商网站 A ,不定期出现了下面这种情况:

    1. 浏览商品正常,下单,跳到支付宝支付页面,支付完成跳回,此时跳回的页面出现了一直加载无法响应的情况,这时候再打开一个标签页,浏览商品页也出现了一直加载的情况,等到支付跳回页面出现超时失败页面后,可以浏览商品。再次下单上述情况重现。

    2. 与此网站共用 mysql 的另一个电商网站 B ,一切正常。 A 与 B 共用了包含用户余额的用户信息表,订单相关表都是分开的

    3. 重启 mysql 后,问题不再出现

    4. A 网站支付完成改变订单状态的数据库操作使用了事务, B 没有使用

    求解。
    8 条回复    2015-12-24 17:05:29 +08:00
    fising
        1
    fising  
       2015-12-23 11:39:59 +08:00
    show processlist 看过了吗
    looyao
        2
    looyao  
       2015-12-23 11:53:47 +08:00
    如果是 NGINX+PHP-FPM 的话

    先看下 NGINX 的 error 日志,哪个链接出现了 timeout ,这样可以定位到功能。

    PHP-FPM 如果没有配置慢日志,配置一下慢日志,这样可以方便看到具体哪里慢,可以定位到具体代码航。

    MySQL 也可以配置下慢日志,这样方便分析问题。线上的话, show processlist 看下,具体那个 SQL 执行的慢。

    还有,看下服务器性能, TOP 看下 CPU 占用,负载,如果负载值超过了 CPU 个数,说明有任务堆积,可能是某个逻辑慢,导致链接堆积处理不完,这就要看上边几个问题来分析了。其他感觉 I/O 应该没问题,不过也可以看下。
    Plumes
        3
    Plumes  
    OP
       2015-12-24 16:19:23 +08:00
    @fising @looyao 这两天又观察了一下,发现当出现我描述的那种情况时, show processlist 结果里就会出现等待执行的 sql ,但是这个 sql 并不是固定的,而且以前没出现过,下面这张图是刚刚出现的情况,帮忙看一下

    looyao
        4
    looyao  
       2015-12-24 16:50:46 +08:00
    @Plumes 感觉可能是 ty_member 、 shopjl_order_pay 更新操作有瓶颈了,不知道这两个表的记录数有多少,先看下 where 条件是否走索引,如果没有走索引可能就是问题所在了。还有就是,不知道你是否配置了从库,如果没有从库可以搭建一个从库,做一下读写分离,查询的都走从库。如果是因为表的记录数过多导致的话,可以考虑分表了,比如按月或者季度等。只是大概一个思路,希望能帮到你。
    Plumes
        5
    Plumes  
    OP
       2015-12-24 16:54:44 +08:00
    @looyao ty_member 一共 6000 条左右, shopjl_order_pay 只有不到 3000 条
    fising
        6
    fising  
       2015-12-24 17:02:24 +08:00
    order_pay updating 60s ,好好查查原因
    fising
        7
    fising  
       2015-12-24 17:03:35 +08:00
    show full processlist 看看完整的 SQL 语句吧。记录数这么少,延迟这么高
    looyao
        8
    looyao  
       2015-12-24 17:05:29 +08:00
    @Plumes 数据这么少,性能应该不是问题,是不是 MySQL 没有关闭 DNS 反向解析导致的呢? MySQL 配置文件有`skip-name-resolve`这个么,如果没有,可以加上试下,不过需要重启 MySQL 才会生效。还有一种就是,把前端要访问的主机名,就是 hostname ,加入到 MySQL 所在服务器的 host 里边。比如要连接到 MySQL 服务的机器 IP 是 10.10.0.10 ,主机名是 node1 ,那么直接在 MySQL 服务所在机器的 hosts 文件中加入

    10.10.0.10 node1

    可能是这个问题也可能不是,不过你可以试下。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2969 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 13:26 PVG 21:26 LAX 06:26 JFK 09:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86