小型vps nginx+php-cgi 内存过大应急预案
朋友买了台vps 内存在512M ,有时候多个cgi进程是的内存使用过大 导致502错误
除了基本的优化外 ,这里就不写了,网上一堆。
应急预案脚本
#!/bin/sh
function fastCgiRestart(){
killall -9 php-cgi
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -f /usr/local/php5/bin/php-cgi
}
function startNginx(){
/usr/local/nginx/sbin/nginx -t
}
while true
do
echo `free | awk ‘{print $3}’` | awk ‘{print $2}’ >a
usemem=`cat a`
echo `free | awk ‘{print $2}’` | awk ‘{print $2}’ >b
countmem=`cat b`
usememcache=”$usemem”
sysmemcache=”$countmem”
if [ $usememcache -gt 511111 ] ; then
fastCgiRestart
startNginx
else
echo ’sys is ok’
fi
sleep 5
done
注释:
# if [ $usememcache -gt 511111 ] ; then 表示但内存达到511111 时候重启php-cgi具体的参数可以依照内存的大小而定
总之这个《应急预案》是主动出击,保证站点的运行。
gnome-terminal 错误记录
今天我的redhat5启动发生如下错误:在为 gnome-terminal 装入或保存配置信息时发生错误。您的某些配置设置可能不能正常工作。
打开终端:rm -rf /tmp/*
重启 ok。
Android编程体验
Android编程体验
当今Mobile OS 虽四足鼎立, 但windows mobile 传统优势正在消失, Symbian颇显老矣, iPhone OS 秉承苹果一贯的作风高高在上,唯有Google Android还算比较优质兼平民,这点从G4就可以看出。
以前倒腾过windows mobile的编程,再看看现在的android编程真是相差蛮多的。虽然两者都是基于java编程。Android更能体现java高度配置的特性。
Android的编程环境搭建也比较容易
安装:
1 android-sdk-windows
2 Eclipse + ADT
Android的编程过程比较人性化 以下是重点
重要配置:
— layout 界面布局文件
Main.xml 界面核心XML配置
…… 其它更能界面配置
— values 变量定义文件夹
Strings.xml 可以理解为程序的语言包配置文件
— AndroidManifest.xml 十分重要的活动控制中枢 如对话框等活动都要向它登记 比较强势的文件
以下的我的一个例子截图

被肯德基第二轮秒杀
秒杀地点:肯德基北京安定门店
秒杀主题:肯德基中国公司于北京时间2010年4月6日发起了“超值星期二 特别秒杀”活动,有效期4月6日至4月9日。
秒杀内容: 超值星期二 热别秒杀 外带全家桶一份 原价64.00元 力减32元。
秒杀过程 :怀着对肯德基品牌的几分热度掏出优惠券,“它”说我的优惠价已经第二轮甚至第三轮了。
秒杀”一种快速而高效的制敌方式。呈几何时蜂拥互联网。
近来一些公司也看中其公关效应,大力“秒杀”消费者的热情。典型的案例是“淘宝的一元秒杀房子”。
我们“被秒杀”了
又一次“被”
肯德基说只想让秒杀“N元” 可是对肯德基品牌忠诚的中国人疯狂了
肯德基怕了
“不是怕中国人疯狂 因为他们爱我们”肯德基说
“坚持住” “沉默住” 他们会散去
于是他们坚持住了
无情的白纸写着 “中国人“ 你们已经是二轮或三轮了
我怕了 请不要再秒杀我了
“让利 超值” 一种可笑公关
可笑活动的开始 注定要秒杀消费者
可笑活动的开始 注定要秒杀企业的信用



网页正文提取
网页正文提取的算法很多也很复杂 当然准确度更有不同
技术难点无非就是在正文除噪
我的实现方法是《基于相似度及密度匹配》
1 网页分块
2 标题相似度匹配
3 求网页平均长度及密度
下图是sina的一篇新闻最终页密度值及相似度波形图:

先放出demo
准确度还有待提高
vc/delphi 获取IE8 的URL
在进行IE toolbar(工具条)开发的时候会碰到IE版本差距 造成的句柄获取为空,主要是ie8采用了卡片切换的原因。我之前是用delphi 进行 ie toolbar开发 因为图delphi的方便。说实在话 vcl的开发效率要比atl高。但是受限vcl 的 ie8 线程问题 后来改用vc 的atl。(做客服端我还是选用vcl)。
回到正题 delphi和vc获取ie8当前url的方法
delphi
- function GetUrlFromIE8 (Handle: THandle; List: TStringList): boolean; stdcall;
- var
- hWndIE, hWndIEChild : HWND;
- Buffer : array[0..255] of Char;
- begin
- SendMessage(Handle, WM_GETTEXT,1023, integer(@Buffer[0]));
- hWndIE := FindWindow(‘IEFrame’, Buffer);
- if (hWndIE > 0)
- begin
- hWndIEChild := FindWindowEx(hWndIE, 0, ‘WorkerW’, nil);
- if (hWndIEChild > 0) and (ie8log=0) then
- begin
- hWndIEChild := FindWindowEx(hWndIEChild, 0, ‘ReBarWindow32′, nil);
- hWndIEChild := FindWindowEx(hWndIEChild, 0, ‘Address Band Root’,nil);
- hWndIEChild := FindWindowEx(hWndIEChild, 0, ‘edit’,nil);
- SendMessage(hWndIEChild, WM_GETTEXT, 1023, integer(@Buffer));
- thisUrl:=Buffer;
- showmessage(thisUrl);
- end;
- end;
vc:
- HWND IEURLhwnd = 0;
- IEURLhwnd = ::FindWindowEx(IEURLhwnd, 0,TEXT(“IEFrame”), NULL);
- IEURLhwnd = ::FindWindowEx(IEURLhwnd,0,TEXT(“WorkerW”), NULL);
- IEURLhwnd = ::FindWindowEx(IEURLhwnd,0,TEXT(“RebarWindow32″), NULL);
- IEURLhwnd = ::FindWindowEx(IEURLhwnd,0,TEXT(“Address Band Root”), NULL);
- IEURLhwnd = FindWindowEx(IEURLhwnd, 0,TEXT(“Edit”), NULL);
- TCHAR IEURL[1024];
- memset(IEURL, 0, sizeof TCHAR * 1024);
- ::SendMessage(IEURLhwnd, WM_GETTEXT, 1024, (LPARAM)IEURL);
- MessageBox(IEURL);
另外, 具体的窗体 可以用spy 进行查看。
利用 FastDFS 构建分布式图片服务器
最近的项目中一个早期规划的版面大部分基于文字的,图片不多,所以前期没有做图片分离,随着公测,以及页面效果的体验。
决定要用大量图片来做视觉冲击。所以必须架设分布式文件系统来实现图片分离。之前用过mogilefs,感觉还是不错,就是配置起来还是繁琐,
并且是基于mysql做节点日志控制的,所以比较麻烦点。
之所以采用FastDFS,使用它协议比较简单。php操作也比较方便,当然更重要的是性能也不错。
简单配置
/*————–安装—————————*/
wget http://fastdfs.googlecode.com/files/FastDFS_v1.22.tar.gz
tar zvxf FastDFS_v1.22.tar.gz
cd FastDFS
./make.sh
./make.sh install
/*————–配置—————————*/
服务器设定
tracker: 192.168.1.1
storage: 192.168.1.2
/*————–添加配置文件—————————*/
mkdir /usr/local/fasrdfs/
vim /usr/local/fasrdfs/tracker_config
vim /usr/local/fasrdfs/storage_config
/*——tracker_config——–tracker(跟踪器)服务器——————-*/
bind_addr=
port=22122
network_timeout=20
base_path= /www/dlsite/uploads/events/
max_connections=256
store_lookup=0
store_group=group2
store_server=1
reserved_storage_space = 4GB
log_level=info
run_by_group=
run_by_user=
allow_hosts=*
/*——storage_config——–存储节点(storage)服务器—————–*/
disabled=false
group_name=group1
bind_addr=12
port=23000
network_timeout=20
heart_beat_interval=30
stat_report_interval=600
base_path=/www/dlsite/uploads/events/
sync_wait_msec=200
max_connections=256
tracker_server=192.168.1.2:22122
log_level=info
run_by_group=
run_by_user=
allow_hosts=*
/*——————-启动————————————*/
/usr/local/bin/fdfs_trackerd /usr/local/fastdfs/tracker_config
/usr/local/bin/fdfs_storaged /usr/local/fastdfs/storage_config
/*————–向存储节点(storage)发送数据—————————*/
/usr/local/bin/fdfs_test /usr/local/fastdfs/storage_config upload 数据文件
/*————–查看进程—————————*/
ps aux | grep fdfs
网络抓包(嗅探)/协议分析 工具ethereal
在常规的开发过程中,如b/s开发 一般的firebug 或其他工具来做网络的请求分析。但是具体的一些内容还是无法全面的获取。如tcp,端口等。
如果在开发基于curl的模拟登录应用,如sns社区常用模块中的获取163 邮箱的好友列表.这将是一款不错的分析工具.
下面是ethereal 分析的截图
QQ的协议地址
mmseg 安装错误 error: ’strncmp’ was not declared in this scope
mmseg 安装错误
- css/UnigramCorpusReader.cpp: In member function 'virtual int css::UnigramCorpusReader::open(const char*, const char*)':
- css/UnigramCorpusReader.cpp:89: error: 'strncmp' was not declared in this scope
- make[2]: *** [UnigramCorpusReader.lo] Error 1
- make[2]: Leaving directory `/lamp/mmseg-0.7.3/src'
- make[1]: *** [all-recursive] Error 1
- make[1]: Leaving directory `/lamp/mmseg-0.7.3'
- make: *** [all] Error 2
解决办法
- vim src/css/UnigramCorpusReader.cpp
添加
- #include <string.h>
ok!

