博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次惊心动魄的上线问题
阅读量:4879 次
发布时间:2019-06-11

本文共 2900 字,大约阅读时间需要 9 分钟。

项目上线了,跑了一段时间,就出现卡死的情况。

一看服务器的CPU或者内存并没有多高。
后来重启了一下Nginx和php-fpm后就正常了。
通过查看Nginx错误日志104: Connection reset by peer,发现需要修改配置。
nginx的buffer太小,timeout太小。

client_header_buffer_size 5m;large_client_header_buffers 4 5m;client_body_buffer_size 20m;fastcgi_buffer_size 128k;fastcgi_buffers 4 128k;fastcgi_busy_buffers_size 256k;gzip_buffers 16 8k;proxy_buffer_size 64k;proxy_buffers 4 128k;proxy_busy_buffers_size 256k;keepalive_timeout 240;fastcgi_connect_timeout 600;fastcgi_send_timeout 600;fastcgi_read_timeout 600;proxy_connect_timeout 600s;proxy_send_timeout 1200;proxy_read_timeout 1200;

修改后,重启Nginx。

风平浪静的时间久了。
可是,过了一段时间,又出现问题了。

日志继续监控者。

422101-20190102164635462-2094720132.png

后来继续排查,发现接口中使用了Curl方法。

优化前 ,

// 通过POST方式发送json数据static public function doPostJson($url = '', $param = [] ,$contentType = 'json') {        $ch = curl_init();        // 请求地址        curl_setopt($ch, CURLOPT_URL, $url);        // 请求参数类型        $param = $contentType == 'json' ? urldecode(json_encode($param,JSON_UNESCAPED_UNICODE)) : http_build_query($param);        // 关闭https验证        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);        // post提交        if($param){            curl_setopt($ch, CURLOPT_POST, 1);            curl_setopt($ch, CURLOPT_POSTFIELDS, $param);        }        // 返回的数据是否自动显示        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        // 执行并接收响应结果        $output = curl_exec($ch);        // 关闭curl        curl_close($ch);        return $output !== false ? $output : false;}

优化后,

// 通过POST方式发送json数据static public function doPostJson($url = '', $param = [] ,$contentType = 'json',$timeout=3) {        $ch = curl_init();        // 请求地址        curl_setopt($ch, CURLOPT_URL, $url);        // 请求参数类型        $param = $contentType == 'json' ? urldecode(json_encode($param,JSON_UNESCAPED_UNICODE)) : http_build_query($param);        // 关闭https验证        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);        curl_setopt($ch, CURLOPT_TIMEOUT    , $timeout);        // post提交        if($param){            curl_setopt($ch, CURLOPT_POST, 1);            curl_setopt($ch, CURLOPT_POSTFIELDS, $param);        }        // 返回的数据是否自动显示        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        // 执行并接收响应结果        $output = curl_exec($ch);        // 关闭curl        curl_close($ch);        return $output !== false ? $output : false;}

之前没有timeout设置,导致获取别人信息的时候会一直无法结束。多个这样的curl操作之后,直接导致nginx的buffer被用完了,直接死掉。

至此,终于风平浪静了。
发现问题,解决问题。需要经验。
平时写代码规范,少留坑。话说,不经历大风大浪也不知道该如何优化。
首页访问时间长,占用Nginx服务,可以放入Redis缓存当中。
Nginx错误日志,可以排查问题所在。
Mysql慢查询日志,可以优化查询Sql,添加索引。
查询慢,会用户体验不好,加大资源消耗。(CPU,内存)
如果用户量大,日志文件会快速堆积,导致服务器空间不足。
需要定期清理,写shell脚本。
这次经理,惊心动魄,学会了发现问题,解决问题。
感受了,代码,服务器环境,数据库优化,系统架构等方面的知识。
感受到了日志对于排查错误的重要性。
日志,让问题更加的直观。
日志,可以更好的监控用户量。
量大了,问题都出现了。
百万pv,需要一个优秀的系统架构,强大的服务器,健壮的代码,优质的算法。
百万pv,有点意思。

转载于:https://www.cnblogs.com/jiqing9006/p/10209408.html

你可能感兴趣的文章
Python中的数据类型
查看>>
讲给普通人听的分布式数据存储【转载】
查看>>
关于最短路
查看>>
Hbase记录-zookeeper部署
查看>>
Python pexpect出现错误‘module have no attribute "spawn" 解决办法
查看>>
vs2008 C# 怎么调试C++ dll[转]
查看>>
PHP的魔术方法
查看>>
警惕麦咖啡的"缓冲区溢出保护"引起的ASP.NET 中 System.OutOfMemoryException 的错误...
查看>>
optimizer_dynamic_sampling
查看>>
HTML(WEB)开发day05
查看>>
序列合并求前K小项 POJ2442
查看>>
unity点选构建Mesh并保存OBJ
查看>>
python kmeans实战 - 单机一层聚类(小玩具哦),下次再弄个分布式多次聚类
查看>>
Java主要有那几种文件类型?各自的作用是什么?
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>
2017.11.18 手把手教你学51单片机-点亮LED
查看>>
xml的创建与解析
查看>>
grep不区分大小写查找字符串方法
查看>>
linux系统灵活运用灯[android课程3]
查看>>
Android 通用Dialog中设置RecyclerView
查看>>