Open mingyun opened 10 years ago
一、网络问题
1、临时性 检查:ping, mtr 等命令,检查网络状况,DNS等 解决:联系机房或视具体情况而定 2、网络不同或距离太远 检查:客户端和机房所在网络情况 解决:双线机房或分布式部署,动态DNS,需要考虑成本 3、资源加载慢 检查:chrome控制台 解决:CDN,合并请求,压缩页面代码等
二、前端问题
1、浏览器太烂 2、页面设计不佳 检查:浏览器解析时间,是否DOM节点过多,JS有问题等 解决:优化页面代码
三、服务端问题
1、服务器状态 检查:负载,CPU, 网络,内存,磁盘空间等使用情况 如果单台服务器性能受限,考虑调整为分布式架构,如nginx转发,DB分库分表等 2、PHP响应慢 检查webserver日志中的响应时间 如果服务器整体负载不高,但PHP的数据返回时间过长,在PHP代码中分段输出处理时间 更具环境的不同,可以选择直接输出或是写入日志 如果是高访问量的在线调试,一般选取一定比例记录日志,防止日志过多带来的额外系统开销 逐步缩小范围,定位、优化 3、DB响应慢 有分为读取慢和写入慢 读取慢 检查:慢查询日志; show processlist 查看当前DB状态,看哪些请求停留较多 top查看mysql进程的开销 代码中记录SQL和执行时间 解决: 手动执行可疑SQL(注意排除query cache的影响),用explain,profile等工具分析SQL性能 再考虑是否优化索引,或者分库分表,或者增加缓存 写入慢 检查:除读取慢的检查方法外,还有 iostat 检查磁盘IO 查看mysql binlog的写入速率 解决:增加缓存,分库分表,优化索引,从业务逻辑上考虑减少DB操作,合并写入 4、其他 被攻击,webserver进程数受限,甚至内网流量过高等原因,都有可能导致访问缓慢,具体情况具体分析
-- XiangZ
答: 日志记录本身是要消耗资源的,debug的信息非常多,所以不能开,当然性能允许也可以开。我说的两块日志是公共日志,就是不需要业务模块显式写日志的,实际写还是一个入口的。SQL出错的原因有很多,比如违反唯一性约束,这种情况下还是可控的,称为错误(error)合适一些,而异常则会引起程序流程终止执行,属于更高级别的错误(fault)。
答: 写日志不需要通过errorno区分,在入口try-catch捕获异常就可以了。 -- 水浸街
附加: 问:命名空间的好处是什么呢? — 李博 答:依赖管理和自动加载在下划线时代就有了 只是没现在这么成熟。 命名空间能做的,下划线基本都能做。 要说好处 我看到的是开源大佬不再顾忌长类名的问题,通过命名空间设计出更优秀合理的架构 symfony doctrine 都是用了命名空间后 类名变长 分层变细的例子 —twin
问:我们还在使用5.2.*这种版本的php。没有跟得很近。大家是否遇到什么强需求,会迫使或说主动使用更高版本的php? — 李博 答:一般也可以不升级,唯一担心就是将来很多开源代码都支持很多新特性,你老版本不能用,就会郁闷哦 — 黑夜路人 答:5.2太老了,PHP优秀的开源类库,大多用上了命名空间,要求最低5.3.3 — twin
一、网络问题
二、前端问题
三、服务端问题
-- XiangZ
答: 日志记录本身是要消耗资源的,debug的信息非常多,所以不能开,当然性能允许也可以开。我说的两块日志是公共日志,就是不需要业务模块显式写日志的,实际写还是一个入口的。SQL出错的原因有很多,比如违反唯一性约束,这种情况下还是可控的,称为错误(error)合适一些,而异常则会引起程序流程终止执行,属于更高级别的错误(fault)。
答: 写日志不需要通过errorno区分,在入口try-catch捕获异常就可以了。 -- 水浸街
附加: 问:命名空间的好处是什么呢? — 李博 答:依赖管理和自动加载在下划线时代就有了 只是没现在这么成熟。 命名空间能做的,下划线基本都能做。 要说好处 我看到的是开源大佬不再顾忌长类名的问题,通过命名空间设计出更优秀合理的架构 symfony doctrine 都是用了命名空间后 类名变长 分层变细的例子 —twin
问:我们还在使用5.2.*这种版本的php。没有跟得很近。大家是否遇到什么强需求,会迫使或说主动使用更高版本的php? — 李博 答:一般也可以不升级,唯一担心就是将来很多开源代码都支持很多新特性,你老版本不能用,就会郁闷哦 — 黑夜路人 答:5.2太老了,PHP优秀的开源类库,大多用上了命名空间,要求最低5.3.3 — twin