nginx 502,服务器超时跟踪

近日腾讯老是报充值服务超时,但是查nginx日志,又不见具体的日志来,很是奇怪

1.在nginx中加访问日志,开始以为502这种超时不会有日志,结果发现还是有的):

10.105.24.130 - - [15/Aug/2016:15:16:10 +0800] "GET /Api_QQPayTest/pay HTTP/1.1" 502 172 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

目前只在access_log

access_log  /data/logs/pay.log  ;

2.怀疑php的脚本是不是有超时的情况,毕竟生产环境各种可能都有, 加上php-fpm 慢日志

slowlog = /data/logs/$pool.log.slow

 request_slowlog_timeout = 10s
 
request_terminate_timeout = 20s

3.测试:

将脚本sleep(20);这样肯定是超时的

发请求测试:

 
[root@VM_24_130_centos ~]# curl 'http://10.0.0.200:9001/test/'
<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.4.4</center>
</body>
</html>
You have mail in /var/spool/mail/root
[root@VM_24_130_centos ~]# 

同时发现慢日志

[root@VM_70_200_centos Api]# tail -f /data/logs/www.log.slow 

[15-Aug-2016 15:16:00]  [pool www] pid 22915
script_filename = /data/htdocs/web/index.php
[0x00007fa976fdb498] sleep() /data/htdocs/web/controllers/test.php:117
[0x00007ffc6fd89770] test() unknown:0
[0x00007fa976fdb390] run() /data/htdocs/web/index.php:25

4.收工等生产环境日志来

5.参考 这里有更好的方案,加上php-fpm的执行时间 这里

拥抱nodejs

标准化的JS写法,甚至还可以用标准化的ES(ECMAScript)来写,在服务端执行是不是很酷啊....

1.安装 nodejs  在官方安装, nodejs.org
在linux源码安装可能还要装个npm ,用到时候再装吧 centos :

yum install nodejs
yum install npm

2.上手体验

var test =[];
test.push('item1');
test.push('item2');
console.log(JSON.stringify(test));//标准打印,标准JSON支持
const fs = require("fs");
var contents = fs.readFileSync("a.js").toString();
console.log(contents);

3.第三方插件 这个是nodejs的精华,拿来就可以用了,npm install request (全局npm install -g request)

var request = require("request");
var result=process.argv[3];

4.应用  刚好一个爬虫到的数据是js,PHP也不擅长解析,将这个js eval掉,再json_encode出给php用,是不是很帅-_-

刚好这个request还支持headers referer的,就不怕来源问题了

5.yum安装包全局安装问题 有时会有提示全局安装包找不到,其实是yum安装没有加入全局变量导致,需要加入/etc/profile

export NODE_PATH="/usr/lib/node_modules"

再执行source /etc/profile来生效

学习来源: 1.https://howtonode.org/hello-node 2.https://ianwu.tw/2013/08/17/nodejs-fake-referer/ 3.这个simple-code-highlighter插件还不错 ,用的

<

pre>标签,但有个问题会请求google字体!!

php调试性能[xdebug / xhprof ]

xdebug 官方地址: xdebug >>>>

在WAMP上的配置:

看看张宴的BLOG>>>>讲如何使用

但实际上用下来不是太好。有的函数执行时间没有? 是不是要看看xhprof了?

[xhprof] 网上都是linux,这里要显示提windows下的,尽管生产环境会大不相同,但还是有参考价值的 环境说明: 1.下载:wamp 2.2d (32位),64位的好像xhprof没有人去编译。。。 Apache 2.2.21 Php 5.3.10 Mysql 5.5.20 2。下载 xhprof扩展: 下载在这里:>>>> 现在下载的是 XHProf 0.10.3 for PHP 5.3 vc9 这个版本 ,放在c:\wamp\ …. php\ext目录下,刷新wamp就可以加载xhprof了,在php就可以看到他的扩展项了

xhprof

xhprof

该 图来原:>>>>,thx 哈尼洛可

3。下载日志查看工具 Graphviz ,下载去他的官网>>>>> 安装到c:\根目录好了

3.现在要修改一下日志输出目录了 php.ini最后加好 [quote] [xhprof] xhprof.output_dir=”c:/wamp/xhprof_log” [/quote]

4.调试和查看 在这里下载xhprof 查看工具文件: 解压放在 c:\wamp\www\xhprof目录下

配置xhprof目录下的config.php [quote] define(‘ERROR_FILE’, ‘c:/wamp/logs/xhprof_dot_errfile.log’); define(‘TMP_DIRECTORY’, ‘c:/wamp/tmp/xhprof/tmp/’); define(‘DOT_BINARY’, ‘c:/Grafika/Graphviz/bin/dot.exe’); [/quote] 执行 http://localhost/xhprof/examples/sample.php

看看c:/wamp/xhprof_log 目录下有没有日志文件 ? 按照sample提示的查看报表: http://localhost/xhprof/xhprof_html/index.php?run=生成日志 的编号&source=xhprof_foo

KO,就可以看 到日志,性能好坏了


出错参考: PHP Warning: PHP Startup: Unable to load dynamic library ‘c:/wamp/bin/php/php5.3.8/ext/php_xhprof.dll’ – %1 is not a valid Win32 application.\r\n in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library ‘c:/wamp/bin/php/php5.3.8/ext/php_xhprof.dll’ – %1 is not a valid Win32 application. 【64位的wamp用了32位扩展】 in Unknown on line 0

这种可能是就是xhprof是不是