Mar
3
其实我不是想说ob_start,而是解决一个nginx的proxy_cache问题。
我使用proxy_cache对根据页面头信息里的有效期和状态页面进行缓存。这个的性能还是很不多。交给php进行控制,而且不需要每个页面都创建。只是第一次访问时才生成缓存。
在长期的运行下,发现一个问题,如果程序在出现超时后,没有返回非200的状态(如500).还是返回200。这样就问题大了。本来proxy_cache就是靠状态来判断,在出错后还是返回200这样我如何是好呢?所以我就想到使用ob_start()进行缓存。但实际上这个是没有作用。
ob_start只是开通缓存的通道。如果出错问题,他还是会返回通道的内容数据,所以不会有影响,只是非正常退出,不返回数据而已。
另外ob_start开启的缓存通道可以多个开通。
所以ob_start不能解决状态问题。最后使用set_error_handler(),设置一个出错回显的函数。直接在函数中针对出错的函数。输出500的头信息。
好了这个就可以解决问题了。
那ob_start还要不要用?我想还是用吧。出错后就不要输出页面的内容了。因为内容未处理完。不如不输出。
<?php
ob_start()
set_error_handler('my_error_handler');
function my_error_handler($errno, $errmsg, $filename, $linenum, $vars){
header('HTTP/1.1 500 Internal Server Error');
}
$smarty = new Smarty();
$smarty->display();
我使用proxy_cache对根据页面头信息里的有效期和状态页面进行缓存。这个的性能还是很不多。交给php进行控制,而且不需要每个页面都创建。只是第一次访问时才生成缓存。
在长期的运行下,发现一个问题,如果程序在出现超时后,没有返回非200的状态(如500).还是返回200。这样就问题大了。本来proxy_cache就是靠状态来判断,在出错后还是返回200这样我如何是好呢?所以我就想到使用ob_start()进行缓存。但实际上这个是没有作用。
ob_start只是开通缓存的通道。如果出错问题,他还是会返回通道的内容数据,所以不会有影响,只是非正常退出,不返回数据而已。
另外ob_start开启的缓存通道可以多个开通。
所以ob_start不能解决状态问题。最后使用set_error_handler(),设置一个出错回显的函数。直接在函数中针对出错的函数。输出500的头信息。
好了这个就可以解决问题了。
那ob_start还要不要用?我想还是用吧。出错后就不要输出页面的内容了。因为内容未处理完。不如不输出。
<?php
ob_start()
set_error_handler('my_error_handler');
function my_error_handler($errno, $errmsg, $filename, $linenum, $vars){
header('HTTP/1.1 500 Internal Server Error');
}
$smarty = new Smarty();
$smarty->display();
Sep
16
最近在做android的开发。经常会出现这种问题:
The connection to adb is down, and a severe error has occured.
说是adb的服务没有启动。没启动就启动呗.
注意如果没有把sdk\platform-tools的目录加到path系统变量的话。那就先进入到sdk\platform-tools下再执行上面两个命令。
The connection to adb is down, and a severe error has occured.
说是adb的服务没有启动。没启动就启动呗.
adb kill-server
adb start-server
adb start-server
注意如果没有把sdk\platform-tools的目录加到path系统变量的话。那就先进入到sdk\platform-tools下再执行上面两个命令。
Jun
19
今日在服务器的mysql出现了”Too many connectionsConnection closed by foreign host “错误。这个错误之前在测试机也出现过,当时没有留意,只是将测试机中的web服务器定时重启,以解决该问题。而今日出现的在外网的服务器,不能如些操作。可惜在baidu上根据没有找到有用的资料。都是一些小白写的文章。
后来经朋友分析,可能是iptables引起。由于linux下的iptables都是使用ip_conntrack进行跟踪,所有的进出数据包都会记录在连接跟踪表中,包括tcp,udp,icmp等,一旦连接跟踪表被填满以后,就会发生丢包,导致网络不稳定。
而我这一次刚好是由于昨天晚上增加了新的iptables条件,在大量访问下,出现了掉包的情况。引起mysql错误,而最后mysql由于没有获取到正确的连接,而完全没有占用cpu.
后来经朋友分析,可能是iptables引起。由于linux下的iptables都是使用ip_conntrack进行跟踪,所有的进出数据包都会记录在连接跟踪表中,包括tcp,udp,icmp等,一旦连接跟踪表被填满以后,就会发生丢包,导致网络不稳定。
而我这一次刚好是由于昨天晚上增加了新的iptables条件,在大量访问下,出现了掉包的情况。引起mysql错误,而最后mysql由于没有获取到正确的连接,而完全没有占用cpu.
Apr
23
原来网站上一直使用nginx的代理缓存,确实能给服务器节省大量的性能。能将大部分的页面进行缓存,但最近一段时间,发现并没有像以前那样将文件进行缓存。在经过检查后,发现原来 proxy_cache是对头信息有限制的。
http://wiki.nginx.org/HttpProxyModule#proxy_cache
proxy_cache受几个因素影响:
1,proxy_buffers必须启动,否则将不能使用缓存
2,如果头信息存在以下的情况,缓存将会被忽略。
有Set-Cookie
Cache-Control的内容包含: "no-cache", "no-store", "private", or a "max-age" 是0
Expires 设置的时间一个过期的时间
X-Accel-Expires: 0
经过分析,原来程序中有一个程序修改后,默认所有页面都会传出一个Set-Cookie的值,这个值引起页面一直没有行缓存。从而使用页面服务器一直很慢。
http://wiki.nginx.org/HttpProxyModule#proxy_cache
引用
The cache depends on proxy buffers, and will not work if proxy_buffers is set to off.
The following response headers flag a response as uncacheable unless they are ignored:
Set-Cookie
Cache-Control containing "no-cache", "no-store", "private", or a "max-age" with a non-numeric or 0 value
Expires with a time in the past
X-Accel-Expires: 0
The following response headers flag a response as uncacheable unless they are ignored:
Set-Cookie
Cache-Control containing "no-cache", "no-store", "private", or a "max-age" with a non-numeric or 0 value
Expires with a time in the past
X-Accel-Expires: 0
proxy_cache受几个因素影响:
1,proxy_buffers必须启动,否则将不能使用缓存
2,如果头信息存在以下的情况,缓存将会被忽略。
有Set-Cookie
Cache-Control的内容包含: "no-cache", "no-store", "private", or a "max-age" 是0
Expires 设置的时间一个过期的时间
X-Accel-Expires: 0
经过分析,原来程序中有一个程序修改后,默认所有页面都会传出一个Set-Cookie的值,这个值引起页面一直没有行缓存。从而使用页面服务器一直很慢。
Apr
23
在linux下批量删除缓存文件真是一个很麻烦的事。网上有人说用rsynx进行批量删除。
但是在我的实践过程中,这个方法,实际上也不好使,而且效率比rm的效率要低。
最后还是使用rm进行删除文件。
但是在我的实践过程中,这个方法,实际上也不好使,而且效率比rm的效率要低。
最后还是使用rm进行删除文件。
nohup rm -rfv ./cache.bak &