1
mhycy 2016-03-08 10:16:06 +08:00 2
我觉得你直接找个人给你排查还更快一些。。
或者自己尝试把应用搬到别的机器进行测试。。 |
2
hoythan OP 网站正常的时候,访问是非常非常快的,基本上 0.45 秒加载完毕,但是卡的时候就坑爹了, 10 分钟都可能进不去!
![未命名.JPG]( https://ooo.0o0.ooo/2016/03/07/56de3790bb384.jpg) |
3
dark456852 2016-03-08 10:21:34 +08:00 1
老板不是应该要请个运维的吗?
|
4
mhycy 2016-03-08 10:21:51 +08:00 1
|
5
jarlyyn 2016-03-08 10:25:18 +08:00 1
不看代码看日志有啥意思……
几个问题 1.php 的 opcache 开了没有。 2.首页之类的页面,程序里有没有启用合适的缓存。 3.数据库有没有相应的索引优化。 一般这三点都做了,就只剩下业务逻辑的问题来了吧? |
6
mhycy 2016-03-08 10:26:37 +08:00 1
现在等待时间 500-600ms 还算正常
|
7
yangqi 2016-03-08 10:28:16 +08:00 1
你发 access.log 有什么用
另外一个贴有人说过了,你图片优化太烂了,一个头像图片都要 110K 了,随便一个页面就要 3 , 4MB 大小。再加上小水管访问的人多了肯定不行。很多连接都要等待长时间下载图片,如果 nginx 配置的连接数太小的话,新连接就要等。基本肯定和 php 和 mysql 没什么关系,带宽和 nginx 的配置 网站的图片还是在 wp-content/uploads 里面,怎么跑云上了 |
8
lynnworld 2016-03-08 10:31:08 +08:00 1
nginx 的日志把 request_time 和 upstream_response_time 记录下来。然后看是具体哪个请求会慢。
|
9
hoythan OP |
10
abscon 2016-03-08 10:35:09 +08:00 1
“另外我发誓一分积分没赚”——当然大家也没赚一分钱工资不是么……
我觉得真正的好心人不应该帮你解答。分类讨论两种可能 1. 你经过自己的努力能解决问题 2. 你经过自己的努力,不能解决问题 对于情况 1 ,帮你的话你会形成依赖,有什么问题就发到网上众筹,而不是尝试通过学习提高自身姿势水平 对于情况 2 ,还是转行为妙,否则好心人帮了你的话,对你老板或者对网站的用户来说就不是好心人。 当然江湖救急除外 |
12
hoythan OP @abscon 我研究了一晚上,人都要 sb 掉了。我解决不了这个问题啊。
现在我备用方式是再买一台服务器安装低版本的 php 和 mysql 再切换过去,但是我担心还是出现这样的问题。 |
13
zeac 2016-03-08 10:38:41 +08:00 1
前段时间曾经遇到过这种事,同样的系统,在测试服务器上久的时候要等将近 10 分钟,快的话也要 2 分钟才打开,但是到本地只要 1 分钟左右,
找了两天原因,各种调试,最后用 Xdebug 跟踪发现是一个 curl_exec()等待太久, 建议如果是 PHP 问题,你可以考虑用 Xdebug 分析下到底慢在哪,如果是静态资源文件拖慢的,上一贴已经很多人给出了解决方案 |
14
bk201 2016-03-08 10:41:08 +08:00 1
你这信息太少没法帮忙,上个帖子都有人说了。基本上有什么数据都应该拿出来,服务器系统占用等等。
|
16
Liang 2016-03-08 10:44:35 +08:00 1
建议先将图片都 404 ,排查一下。
|
17
likuku 2016-03-08 10:47:23 +08:00 1
一个页面 3M~4M 。。。配合 4M 小水管,只有呵呵了。
|
18
surfire91 2016-03-08 10:50:13 +08:00 1
这会 500 了
愿意给服务器权限和源码,可以帮你看看 |
19
Infernalzero 2016-03-08 10:50:37 +08:00 1
进 mysql,SHOW FULL PROCESSLIST 看一下当前哪些 sql 语句有问题
如果你有几张表数据量比较大的话,查询语句不当很有可能直接搞跪 另外,看了下你的 nginx 错误日志以及内存占用高的情况,试试在 location 模块中添加这个配置后重启试试 proxy_buffering off; |
20
WangYanjie 2016-03-08 10:51:20 +08:00 1
访问地址呢?死机是什么意思?
|
21
zakokun 2016-03-08 10:54:56 +08:00 1
你不是平面设计师吗...为什么要写代码甚至搞运维??
|
22
mhycy 2016-03-08 10:55:52 +08:00 1
建议:
1 、检查 PHP-FPM 配置 2 、检查 MySQL 配置 具体项目都是子进程连接数等并发处理能力相关的部分。 刚刚的某几个无法访问是我用 ab 压出来的, 10 个并发挂掉(响应速度不到 10 个) 测试目标地址就是首页 |
23
lairdnote 2016-03-08 10:59:52 +08:00 1
需要有偿的协助不?
|
24
lxf1992521 2016-03-08 11:04:47 +08:00 1
建议楼主付费请人解决;
或者建议领导找个运维人员吧 |
26
hoythan OP @Infernalzero
数据库是普通的 wordpress 数据库,容量大概只有 30mb 左右。 @mhycy PHP-FTM 配置: [global] pid = /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/php/var/log/php-fpm.log log_level = notice [www] listen = /tmp/php-cgi.sock listen.backlog = -1 listen.allowed_clients = 127.0.0.1 listen.owner = www listen.group = www listen.mode = 0666 user = www group = www pm = dynamic pm.max_children = 150 pm.start_servers = 20 pm.min_spare_servers = 6 pm.max_spare_servers = 30 request_terminate_timeout = 100 request_slowlog_timeout = 5 slowlog = var/log/slow.log mysql 怎么查看配置是否正常? 如果上淘宝找人解决的话,我应该搜索什么关键词? |
27
ershisi 2016-03-08 11:08:32 +08:00 1
图片还都在本地。没有在云上。
这么看性能压力应该在服务器这一块,你调优一下 php 配置。然后调优一下 mysql 连接数和短连接。 |
28
ToughGuy 2016-03-08 11:08:44 +08:00 1
给服务器 ssh 可以上去帮你分析下。
|
29
hoythan OP |
30
murusu 2016-03-08 11:14:40 +08:00 1
确认你的机子没被人种马吗?
我看到大量形如 GET /p.php?act=rt&callback=jQuery1706147779076103181_1457315390893&_=1457316450363 的访问 |
31
lairdnote 2016-03-08 11:15:31 +08:00 1
哎。。。才赚 2000 阿。。。算了。。无偿吧。。。你 qq 多少
|
34
demo 2016-03-08 11:17:07 +08:00 1
楼主可以用 Xdebug + WebGrind 分析下
|
37
lux182 2016-03-08 11:19:11 +08:00
我觉得可能是 IO 问题,或是 tcp 端口占用未释放,导致端口开太多卡死
|
38
mhycy 2016-03-08 11:19:42 +08:00 1
@hoythan
其实,要是你愿意放多点信息,估计很多人无偿都愿意给你搞。。囧 其实现在思路感觉挺明确的: 首先,排查 PHP-FPM 问题,在运行过程中 HTOP 查看是否进程数过多造成瓶颈(处理完了没释放)。 接着,排查 MYSQL 的连接问题,看多连接并发是否会阻塞或者断掉。 这两点先行排查。 不管有没有问题把过程放出来。 这样至少能知道你现在的排查状态,也能在提问中体现出自身的努力。 |
40
hoythan OP |
41
Infernalzero 2016-03-08 11:22:59 +08:00 1
@hoythan
你这点访问量和 mysql 配置关系不大,而且只有这点数据量的话那慢 sql 的可能性不大了,不过你还是应该登进去确认下当前数据库的情况啊,看看当前所有查询耗时多久 鉴于你阿里云的配置比较低而且内存占用高, nginx 的 buffering 关掉看看效果 |
43
aldnoah 2016-03-08 11:25:41 +08:00 1
感觉信息不够啊。
|
45
czzhengkw 2016-03-08 11:30:08 +08:00 1
oneapm ,能看出大部分问题,包括 curl_exec(),慢查询, session 锁等问题……
|
46
BOYPT 2016-03-08 11:30:45 +08:00 1
是 wordpress 吧?三管齐下:
1.使用缓冲插件,先试试 w3total cache, 效果应该立竿见影的 2.查看 mysql slow log, 找出慢查询,但通常都是 wp 自身的查询,在 w3 的缓存下理论上会减少的 3.查看 php 的 slow log ,一般会爆出慢调用栈,贴出 log 让其他人帮你看 |
47
hoythan OP @BOYPT 如果是正常状态的话,网站打开速度非常快, lairdnote 正在帮我查看问题,如果解决了,我把原因和方法贴出来给大家。
|
49
mahone3297 2016-03-08 11:40:31 +08:00 1
前端设计师接了后端的活?
我觉得 lz 还是找专人看吧,也不需要淘宝找,就在这里找吧,不是也有人加你了嘛。 大家说的,图片的问题, lz 应该已经解决了吧? |
50
hoythan OP @mahone3297 图片问题已经解决,现在已经排除到数据库问题了。感谢大家
|
51
jarlyyn 2016-03-08 11:44:11 +08:00 1
另外给个建议。
换 apache 环境。 如果上面问题都解决的话,感觉有可能问题是处在 php-fpm 或者 nginx 上。 4g ,这点访问量,跑 apache 问题不大 |
52
mahone3297 2016-03-08 11:45:45 +08:00 1
@hoythan 数据库刚才好像看到你说什么 30m ,你的数据库和应用是在同一台机器上的么?
考虑配一个 rds ?虽然我不确定是数据库的问题,但这样,至少基本能排除数据库的问题。 |
53
fenghua1013 2016-03-08 12:03:01 +08:00 1
你的服务器 cpu 负载太高了
检查一下进程 |
54
npc0der 2016-03-08 12:07:34 +08:00 1
把 php-cgi.sock 定到 /dev/shm/ 下面看看 另外 你可以在终端下 看下 是不是磁盘 io 过高导致的。
|
55
hoythan OP 刚刚又崩溃了
以下是服务器的 messages 日志 Mar 8 12:11:19 iZ25hwakeqjZ sshd: /usr/sbin/sshd: error while loading shared libraries: cannot allocate symbol search list: Cannot allocate memory Mar 8 12:11:32 iZ25hwakeqjZ systemd-logind: Failed to save session data /run/systemd/sessions/312: No space left on device Mar 8 12:11:32 iZ25hwakeqjZ systemd-logind: Failed to save user data /run/systemd/users/0: No space left on device Mar 8 12:11:33 iZ25hwakeqjZ systemd-logind: Removed session 313. Mar 8 12:11:33 iZ25hwakeqjZ systemd-logind: Removed session 312. Mar 8 12:11:43 iZ25hwakeqjZ systemd-logind: Removed session 311. Mar 8 12:11:43 iZ25hwakeqjZ systemd-logind: Removed session 310. Mar 8 12:11:43 iZ25hwakeqjZ systemd-logind: Removed session 309. Mar 8 12:11:43 iZ25hwakeqjZ systemd-logind: New session 315 of user root. Mar 8 12:11:43 iZ25hwakeqjZ systemd-logind: New session 314 of user root. Mar 8 12:11:43 iZ25hwakeqjZ systemd: Started Session 314 of user root. Mar 8 12:11:43 iZ25hwakeqjZ systemd: Starting Session 314 of user root. Mar 8 12:11:43 iZ25hwakeqjZ systemd: Started Session 315 of user root. Mar 8 12:11:43 iZ25hwakeqjZ systemd: Starting Session 315 of user root. |
56
realpg 2016-03-08 12:15:18 +08:00 1
让你老板给个红包,给你完完整整配好环境,优化访问,加固系统,如何……
一点运维经验没有就揽运维的活干吗…… |
57
yeqiu 2016-03-08 12:21:09 +08:00 1
LZ 加油吧,祝你好运
|
58
Deeer 2016-03-08 12:25:26 +08:00 1
第二天又看到你了。虽然不大懂, But good luck :]
|
59
lgh 2016-03-08 12:31:42 +08:00 1
Cannot allocate memory 内存耗尽了吧
|
60
ztrt 2016-03-08 12:32:31 +08:00 1
pm.max_spare_servers = 30
为什么只开 30 个? 在你卡的时候用 top 命令查看负载及进程使用情况,还有使用 vmstat 1 100 或者开启慢 查询等等都能看出些端倪,不会搜索只会伸手不骂你才怪 |
61
chaegumi 2016-03-08 12:34:10 +08:00 1
php 的日志没有
|
62
chaegumi 2016-03-08 12:34:56 +08:00 1
nginx 的日志感觉 php 都没起来,或者起来就死的那种
|
63
realpg 2016-03-08 12:44:40 +08:00 1
我已经大概看明白了问题在哪了……
目测需要实测验证…… |
64
ztrt 2016-03-08 12:46:31 +08:00 1
根据日志报错随便百度下就有资料参考 http://bbs.vpser.net/thread-9339-1-1.html
|
65
huson 2016-03-08 13:04:02 +08:00 1
你这个问题 我以前遇到过,是 php-fpm 进程开的太多,内存耗尽了,你把 pm.max_children 改小,把 MYSQL 单独放到一台 ECS 或者增大机器内存
|
66
huson 2016-03-08 13:05:45 +08:00
pm.max_requests 也记得要打开
|
67
Wtoto 2016-03-08 13:06:15 +08:00 1
看看
|
68
jarlyyn 2016-03-08 13:30:38 +08:00 1
Mar 8 12:11:19 iZ25hwakeqjZ sshd: /usr/sbin/sshd: error while loading shared libraries: cannot allocate symbol search list: Cannot allocate memory
Mar 8 12:11:32 iZ25hwakeqjZ systemd-logind: Failed to save session data /run/systemd/sessions/312: No space left on device 内存和磁盘不足? |
69
ztrt 2016-03-08 13:40:02 +08:00 via Android 1
@huson 首先他探针显示内存是够的,其次没记错的话 pm.max_children 这个选项只有在 pm = static 时才有效
|
71
hoythan OP |
72
mengzhuo 2016-03-08 14:06:35 +08:00 1
4Mb 小水管……
4000/8 = 出口才 500KB/s 你这样真的好么…… |
73
sampeng 2016-03-08 14:08:13 +08:00 1
@hoythan 甭怀疑了。去做。 200 还是一样。直接 10000 行不行?让错误暴露出来,给 mysql 加上慢日志时间,找个地方看 mysql 慢日志。。。
post 数据 14mb 是什么鬼。。一条记录这么大?把这条备份,删掉。现象是否依旧。 然后自己分析,自己解决。。有时间来发帖,试了无数方案了。。 |
74
lansexinyu 2016-03-08 14:14:45 +08:00 1
我猜测问题估计在 nginx 配置上面,检查下 nginx 配置!
|
75
homu 2016-03-08 14:19:35 +08:00 1
运维的烦恼?
推荐使用系统监控神器 [Cloud Insight]( http://www.oneapm.com/ci/feature.html) ,及时发现性能问题,轻松运维。 http://wt.sinaimg.cn/thumbnail/006mveLPgw1f1pfmx4m2rj316p0rf7c7.jpg?tags=%5B%7B%22x%22%3A%220.42%22%2C%22y%22%3A%220.17%22%2C%22str%22%3A%22Cloud+Insight+%5Cu7cfb%5Cu7edf%5Cu76d1%5Cu63a7%22%7D%5D 还有报警功能哦~ (对我就是来打广告的,希望能帮到你,哈哈~) |
77
cocalrush 2016-03-08 15:00:13 +08:00 1
mark 回去有空看看 估计是数据库 io 或者系统 io 没设置对...
|
78
ck1llc 2016-03-08 15:12:29 +08:00 1
问题解决了么?等着学习呢
|
81
asddsa 2016-03-08 17:06:39 +08:00 1
还是昨天那句话,你重新一步一步架个 LNMP ,这情况真的会好转的。。。
|
82
imlewc 2016-03-08 18:26:19 +08:00 1
先开 php-slow log 看看是什么地方的问题 log 有时候很重要
|
83
ZGLHHH 2016-03-08 18:45:01 +08:00 1
1.图片、 js 、 css 等静态资源用 cdn 分发( upyun 、 qiniu 均可)
2.套个 CDN 3.阿里云的话建议用云磁盘,本地磁盘的 I/O 低的可怜 4.阿里云的均衡负载 5.站库分离,数据库用云数据库 6.个人不推荐阿里云,建议买国外的机器,便宜又稳定,还是大水管。 [推荐 DO 、 Linode 、 Vultr |
84
ten789 2016-03-08 19:27:42 +08:00 1
两天了还没被老班砍死么 2000 块钱啥都干的破事
|
85
fy 2016-03-08 19:42:32 +08:00 1
楼主你这还没解决?昨天就看到说你图太大,但是加个 CDN 就完事了啊?
填一下域名,改动一下解析,也就 5 分钟的事情 |
86
zencoding 2016-03-08 20:14:18 +08:00 1
一、检查磁盘使用
二、监控故障期 I/O 阿里云的磁盘 I/O 很有趣,是跟着你的实例配置走的 |
87
hoythan OP 完结此贴,感谢大家的支持,初步的诊断是 sql 语句导致的问题。但是具体的还没有排查出来,今天已经更换了新的 lnmp 环境,并安装了监控探针,希望明天可以出结果,如果没有问题,那么我就从工资里拿出一两百块发支付宝红包感谢各位,如果还是有问题,呵呵...大家后天在网易新闻社会板块找找我好了。
|
88
debuge 2016-03-08 21:25:43 +08:00 1
把问题和尽可能多的信息放上来,或者搭建一个非正式运行的环境将问题重现,请大家一起讨论。
另外,轻松一点, 这只是你职业生涯可能遇到的无数问题中的一小个而已,不要想的太严重 |
89
mengzhuo 2016-03-08 21:40:59 +08:00 via iPhone 1
你刚入职吧……这种事老板不会杀了你的,最多炒了你换个人罢了。
ps 删光某网站的数据库的我还不是活得好好的~(逃 |
90
ZGLHHH 2016-03-08 21:43:45 +08:00 1
补:
套 cdn 建议是国内 cdn ,源站国外,否则很容易会被 GFW 阻断连接 |
92
quericy 2016-03-09 00:10:31 +08:00 1
|
94
Peanut666 2016-03-09 00:36:45 +08:00 1
楼主加油,一起学习~~
|
95
iCantus 2016-03-09 09:05:51 +08:00 1
网址多少
|
96
mengzhuo 2016-03-09 09:14:55 +08:00 via iPhone 1
@quericy 实习的时候捅的篓子,
delete 忘了加 where limit 删了近十年的数据,当时就懵 b 了,然后被赶到的经理痛骂一顿 dba 知道我是实习生,就说了句:下次别忘了加 limit 。 就跑去恢复备份了。 |
98
mhycy 2016-03-09 09:56:46 +08:00 8
给大家说说昨天的排查过程吧,因为干扰源存在,问题未最终解决。
开头时候服务器环境的不熟悉浪费大量时间。。 找配置文件,塞个 htop ,塞个 iftop ,因为 CentOS 仅仅在内网用过(无外网访问权限),傻乎乎的就去找包了,结果 CentOS 7 ,半天没找着,最后 yum 发现都能用 翻查 mysql 的实际调用配置文件位置浪费了不少时间。。 ====================================== 刚开始看在本页页头的日志文件,感觉应该是 PHP-FPM/MySQL 阻塞 /挂掉,所以从这个地方入手。 先把看起来有问题的性能参数都给改了, MySQL 的查询缓存开大点。( 4G 内存,大着呢) 压测发现 PHP-FPM 稳定承受所有请求, CPU 占用率未有明显异常,无错误报告。 但同时 MySQL CPU 占用跑满,遂排查。。 首先把 MySQL 的慢查询开了,超时 1 秒,记录日志 压测 50 线程,力求打满。。。然并卵,机器的带宽就 4M ,折算下来理论 512KB/S (事实上跑了 3M 的带宽,结果还是个位数的每秒响应) MySQL 占用继续跑满,但是慢查询没任何异常(未有任何一条数据输出)。 多次测试情况一致。。。页面几乎无反应( 20 秒+) 压测过程中 show processlist; 命令查看当前 SQL 字串,存在大量查询正在 Creating sort index. "SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id ........." (说好的缓存呢?) 翻查数据库,数据是分类类目、 tag 之类的东西 遂翻查代码,首页大量调用 get_post_meta / get_the_category, 对 WP 不熟,但至少反查上去这两个嫌疑最大,结合上面那条 SQL 提到的那些表的数据,看上去,似乎,首页的大部分文章,都调用了一次。。。 传说中的 97 次 SQL ? 这个算是其一,另外在 show processlist;过程中存在大量的 ALERT TABLE 请求。。。 逻辑告诉我,大概是楼主在导数据吧。。。 。。。。。 。。。。 。。。 。。 。 但是在多次压测的时候我还能看到这东西。。。囧 复制一行,问楼主: "ALTER TABLE vp_msg CHANGE COLUMN Status Status TINYINT NOT NULL" "长这样的 mysql 语句你有印象么" "我知道,这是我自己创建的数据表" "这句有问题吗" "...为啥我每次访问首页都能看到这行东西 囧" .............. 屏蔽过后,压测稳定了,至少能稳稳当当的在我可接受的时间内跑完全程,并发 10 (但依旧占用 100%) 在那堆查询问题解决之前,无法进入下一步排查,算是干扰源。 以上就是昨日下午排查的结果。 |
99
h4lt 2016-03-09 10:12:40 +08:00 1
楼上厉害啊。
学习下测试流程。 |