服务脚本在 sapi/fpm/init.d.php-fpm

cp sapi/fpm/init.d.php-fpm /etc/rc.local/init.d/php-fpm

chmod +x /etc/rc.local/init.d/php-fpm

chkconfig --add php-fpm
posted @ 2013-09-26 12:14 小马歌 阅读(408) | 评论 (0)编辑 收藏
 
     摘要: 成功命令:# cc -o my_math.so my_math.c -Wall -llua -ldl -lm -shared# lua callc.lua过程中出现的问题:1. 无法编译过去,“ warning: implicit declarat...  阅读全文
posted @ 2013-09-17 12:30 小马歌 阅读(1038) | 评论 (0)编辑 收藏
 

一、Shell:命令行编辑的功能(快捷键技巧)

Ctrl+a光标移到行首

按ctrl+a后其结果如下:

 

Ctrl+e光标移到行尾

Ctrl+u删除光标处到行首的内容

Ctrl+k删除光标处到行尾的内容

Ctrl+arrow(左右箭头)

二、globbing:文件名通配

 通配符有:

*:任意长度的任意字符

如:a*b:表示以a开头并以b结尾中间含有N个字符的求解,aab,abc,ab

?:任意单个字符

a?b,表示以a开头并以b结尾中间有且仅含有一个任意字符的求解,aab,ayb,abc,ab

[]:指定范围内的任意字符:[abc],[0-9],[a-z],[A-Z]

[:lower:]所有小写字母

[:upper:]所有大写字母

[:digit:]所有数字

如:a[a-z]b,aab,ayb,abc,ab

 求解/etc文件目录下所有以pass开头并以数字或字母结尾的字符

求解所有以字母开头并以数字结尾的字符:

ls [a-zA-Z]*[0-9]

如在:ab、ab~、ab4、4ab、a4b、ayb、abc、x4y、xy3、3xy、aab中求解上述的值:

 [^a-z]表示除了a到z的其他字符,既表示取反:

[[:alpha:]]代表所有以字符开头的字符

[[:punt:]]代表标点符号的集合

 

 

 三、命令行展开的功能

1、~

cd ~rehat

2、{}

用一个命令实现它:

mkdir -p {x/{y/a1,z/b1},m/n}

 

 

实现上述功能mkdir -v{x,m}_{y,z}

3、$()或``(`波浪形的那反引号):命令引用

 

从上面的代码可以看出:

(1)echo是输出命令

(2)date获取系统日期及时将

(3)date +%T获取系统时间

(4)$()与``的作用是等同的,可以替换

 

 四、如何避免字符展开:

a*b

如何创建a*b的文件

touch a*b是修改a*b的解的时间属性

 

 

 

要创建a*b的文件命令用:touch "a*b"即可

 

 

 

 

 

五、转义字符:\

避免一个字符表示通配的意义

六、如何使用命令别名

ll=ls -l

它是由alias定义的,alias是定义别名的命令

 

 

 定义别名:alias cls=clear其意义是将clear定义别名cls,此定义只对当前用户有效,而且重启机器后就失效

撤销别名:

使用原来的意义而非别名的意义可以采用\字符

七、脚本语言

 

bat,批处理

shell

bash

创建user1,user2,user3用户

.sh代表脚本,自然Linux并不以后缀名来识别文件

其中myuseradd.sh中的内容如下:

其演示如下:

 

 

 

posted @ 2013-09-17 11:15 小马歌 阅读(317) | 评论 (0)编辑 收藏
 

Lua-5.2.2

lua-5.2.2发布已有一段时间了,最近在redhat Linux平台编译时报错。这里给出解决方案,或许对某人会有帮助。

编译报错,如下:

lua@home> make linux  ... gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lstrlib.o lstrlib.c gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o ltablib.o ltablib.c gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o loadlib.o loadlib.c gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o linit.o linit.c ar rcu liblua.a lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o         lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lbitlib.o     lcorolib.o ldblib.o liolib.o lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o linit.o  ranlib liblua.a gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lua.o lua.c gcc -o lua   lua.o liblua.a -lm -Wl,-E -ldl -lreadline  /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `PC' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetflag' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetent' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `UP' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tputs' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgoto' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetnum' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `BC' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetstr' collect2: ld returned 1 exit status make[1]: *** [lua] Error 1 make[1]: Leaving directory `/home/lua/lua-5.2.2/src' make: *** [linux] Error 2 

由于lua编译依赖readline库,而其依赖ncurses库,但没有指定,所以出现“未定义的符合引用”错误。需要修改${LUA_DIR}/src/Makefile中linux编译target,在SYSLIBS变量中追加‘-lncurses’选项即可。修改后,如下:

  1. linux:
  2. $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -lncurses"
  3.  
posted @ 2013-09-13 12:33 小马歌 阅读(839) | 评论 (0)编辑 收藏
 
     摘要: from:http://zh.wikipedia.org/zh-tw/HTTP%E6%91%98%E8%A6%81%E8%AE%A4%E8%AF%81摘要訪問認證是一種協議規定的Web伺服器用來同網頁瀏覽器進行認證信息協商的方法。它在密碼發出前,先對其應用哈希函數,這相對於HTTP基本認證發送明文而言,更安全。從技術上講,摘要認證是使用隨機數來阻止進行密碼分析的MD5加密哈希函數應用。它使用HTT...  阅读全文
posted @ 2013-09-13 12:05 小马歌 阅读(659) | 评论 (0)编辑 收藏
 
from:http://wangkaisino.blog.163.com/blog/static/1870444202011431112323846/


今年年初由于facebook而火起jemalloc广人之,但殊不知,malloc界里面很早就出名了。Jemalloc始人Jason Evans也是在FreeBSD很有名的开发。此人就在2006提高低性能的mallocjemallocJemalloc2007始以FreeBSD准引进来的。件技革新很多是FreeBSD起的。在FreeBSD用广泛的技术会慢慢入到linux

目前jemallocfirefox中也在使用。在firefox2中出存碎片问题之后,便在firefox3中使用了jemalloc。在safarichrome中使用的是googletcmalloc

Jemalloc的技特性

Jemalloc聚集了malloc的使用程中所验证的很多技。忽略细节着眼,最出色的部分仍是arenathread cache。(事上,这两个与tcmalloc的架几乎相同。Jemalloc only的部分将会在另一次posting继续

Arena

其像malloc集中管理一整块内存,不如其分成块来分而治之。此小便称为arena想象一下,小朋友一图纸们随意地点。果可想而知,他肯定相互方而不敢肆意地synchronization),而影响画图效率。但是如果老事先在大图纸分好每人的域,小朋友就可以又快又准地在各自地域上画图这样念就是arena

Thread cache

如果是辟小块内存,使不arena而直接malloc各自的线thread cache域。此ideagoogletcmalloc的核心部分,亦在jemalloc中体

再拿上面的例子,小朋友除了一图纸外,再各自A4这样,小朋友在不大面的点,只在自己的A4上心情地即可(no arena seeking)。可以在自己手上的或涂(using thread cache),完全不用人(no synchronization, no locking),迅速有效地

jemalloc的核心layout。看着复杂,其都是上面明的部分。

更好的内存管理-jemalloc - Alex - wangkaisino的博客
 

实际jemalloc的性能呢?

更好的内存管理-jemalloc - Alex - wangkaisino的博客
 

最左的就是glibcmalloc,最右的就是jemalloc从图表上可以看出,jemalloc的性能有glibc倍以上。非常倒性的性能差。因此,使用了jemalloc用程序自然快很多。Jemalloc的就是tcmallocTcmalloc的性能其相差甚微,低jemalloc2.1.04.5%上和tcmalloc1.4版本,而如今到了1.6版本,因此实际这两应该是不相仲伯的。Jemalloc始人jason evans也意一点,cpu core 8以上的算机上jemalloc效率更高。

程序的最后的免午餐 – kth分布式技lab      

2005表了一篇文章免费午餐的时代结束了在之前,程序就算不用费脑子,cpu时钟速度增加,程序性能自己就上去。但在不同,cpu时钟趋定,而核地增加。程序需要适应这样的多线程多程的境,开发出适合的程序。文章的大这样容。

6年之后的如今,篇文章完全现实了。事cpu时钟停留在3GHz,而核不上升。在程序要适线程多程的分布式算,速度才能上升。但是这样的程序很

在在多线程的境下,程序员们的最后一道午餐便是tcmallocjemalloc这样malloc library于使用多线程的程序而言,性能提高%

共享一下我本人的经验。我本人在kth术研究所分布式技lab中承担iLock(分布式同步工具,请参googlechubby)。在iLock中用了googletcmalloc果,性能提升了18~22%

最大的点就是不需要做任何复杂的工作便可得到这样的效果。不需要代编译。只需在行二制之前,在cmd窗口中

$ LD_PRELOAD=tcmalloc所设置的文件夹/libtcmalloc.so

这样在之后行的用程序使用tcmallocjemalloc而代替glibcmallocptmalloc)。置此,我便可得到性能20%的提升,这真是送的最后的免午餐。

如今,在分布式技lab中使用googletcmalloc。原因在于性能上者差不多,但googletcmalloc所提供的程序分析工具非常(heap profiler, cpu profiler)丰富。所以tcmalloc可能更方便一些。

一定要使用最新的malloc?一定要的!

posted @ 2013-09-12 12:05 小马歌 阅读(1288) | 评论 (0)编辑 收藏
 
@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

如何选择数据交换协议

  选择什么样的协议跟我们的应用场景有很大的关系。我们需要考虑我们开发是否方便、接口是否容易发布、是否需要考虑带宽占用成本、序列化和反序列化的性能、接口协议的扩展性等等。下面我们看下几个比较常用的交换协议实现。

协议实现跨语言性能传输量RPC
xml广泛几乎所有很大N(可实现)
json广泛大量一般一般N(可实现)
php serializePHPRPC大量一般一般Y
hessianhessian大量一般Y
thriftthrift大量Y
protobufprotobuf大量N(可实现)
iceice大量Y
avroApache Avro少量Y
messagepackmessagepack大量Y

  上面表格列出了一些常用数据交换协议的一些特性的比较。这里并没有比较好坏,只是想说明不同数据交换协议是有区别的,所以我们需要在我们的应用场景中进行选择。

 messagepack相关资料

http://pluto418.iteye.com/blog/1108457
优势:
1.序列化和反序列化所需要的时间少。通过30000条的记录来测试,msgpack序列化的时间比使用jason来序列化JSON的时间要少三分之一;而反序列化的时间则要少一半。
2.生成的文件体积小。同样也是基于30000条记录来测试,msgpack序列化后生成的二进制文件比用jason序列化出来的时间要少一半。
 
劣势:
1.msgpack对复杂的数据类型(List、Map)支持的不够,序列化没有问题,但是反序列化回来就很麻烦,尤其是对于java开发人员。
2.在上面也提到过,msgpack是通过value的顺序来定位属性的,那么需要在不同的语言中都要维护同样的模型以及模型中属性的顺序。这个会让开发人员很困扰。
3.msgpack无法支持在模型中包含和嵌套其他自定义的模型(如weibo模型中包含comment的列表)。

@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

posted on 2011-12-26 10:57 tobyxiong 阅读(958) 评论(0)  编辑  收藏 所属分类: java

posted @ 2013-09-11 12:08 小马歌 阅读(311) | 评论 (0)编辑 收藏
 

Q:如何配置varnish缓存到硬盘?

A:http://softbeta.iteye.com/blog/1681716

 

Q:如果debug VCL?

A:http://stackoverflow.com/questions/12576248/how-to-debug-vcl-in-varnish

 

Q:怎样不重启varnish让新的vcl生效?

A:用varnishadm进入管理员页面:

Shell代码  收藏代码
  1. vcl.load <configname> <filename> //加载一个新的vcl配置,configname:给配置起个名字,filename:配置的路径  
  2. vcl.use <configname> //使用新的配置  
  3. vcl.discard <configname> // 删除某个配置  
  4. vcl.list //查看所有加载的配置  

 

Q:VCL怎么urlrewrite?

A:https://www.varnish-cache.org/trac/wiki/RedirectsAndRewrites

PS:regsub函数支持后向引用(backreferences)。

eg:

Vcl代码  收藏代码
  1. set req.url = regsub(req.url,"/attachment/(.+)(&token=.+)$","/cache/attachment/\1");  

Q:503 service unavailable?  

A:503错误,这是因为varnish对后端服务器响应header有限制,默认长度是2048,可将其调大一些

启动参数代码  收藏代码
  1. -p http_resp_hdr_len=8192  
 

 

 

VCL官方文档:https://www.varnish-cache.org/docs/3.0/reference/vcl.html

posted @ 2013-09-10 16:00 小马歌 阅读(226) | 评论 (0)编辑 收藏
 
如何定位死循环或高CPU使用率(linux)
 确定是CPU过高

使用top观察是否存在CPU使用率过高现象

找出线程

对CPU使用率过高的进程的所有线程进行排序

ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep xxx
得到如下结果,其中线程2909使用了7.8%的CPU.
2907 2913 0.0 ./xxx
2907 2909 7.8 ./xxx
也可以通过查看/proc中的信息来确定高CPU线程. 打印了4列,线程ID,线程名,用户时间和内核时间(排名未分先后)
awk '{print $1,$2,$14,$15}' /proc/2907/task/*/stat  
 
找出调用栈

使用gdb attach nmsagent所在的进程,在gdb中使用 info threads显示所有线程

gdb gdb>attach 2907
gdb>info threads

得到如下结果,可以发现2909线程的编号是12

13 Thread 0xad5f2b70 (LWP 2908) 0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1
12 Thread 0xad58eb70 (LWP 2909) 0x006e0422 in __kernel_vsyscall ()
11 Thread 0xad52ab70 (LWP 2910) 0x006e0422 in __kernel_vsyscall ()
10 Thread 0xad4f8b70 (LWP 2911) 0x006e0422 in __kernel_vsyscall ()
9 Thread 0xad4c6b70 (LWP 2912) 0x006e0422 in __kernel_vsyscall ()
8 Thread 0xad3feb70 (LWP 2913) 0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1
7 Thread 0xace08b70 (LWP 2914) 0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1
6 Thread 0xac607b70 (LWP 2915) 0x006e0422 in __kernel_vsyscall ()
5 Thread 0xac5e6b70 (LWP 2916) 0x006e0422 in __kernel_vsyscall ()
4 Thread 0xac361b70 (LWP 2917) 0x006e0422 in __kernel_vsyscall ()
3 Thread 0xac2fdb70 (LWP 2918) 0x006e0422 in __kernel_vsyscall ()
2 Thread 0xac1fcb70 (LWP 2919) 0x004ef0d7 in mq_timedreceive () from /lib/tls/i686/cmov/librt.so.1
* 1 Thread 0xb78496d0 (LWP 2907) 0x006e0422 in __kernel_vsyscall ()

使用thread 切换线程,使用bt显示线程栈

gdb>thread 12 gdb>bt

得到如下线程栈

#0 0x006e0422 in __kernel_vsyscall ()
#1 0x001cca26 in nanosleep () from /lib/tls/i686/cmov/libc.so.6
#2 0x001fc2dc in usleep () from /lib/tls/i686/cmov/libc.so.6
#3 0x0806b510 in OspTaskDelay ()
#4 0x0805c710 in CDispatchTask::NodeMsgSendToSock() ()
#5 0x0805cc74 in DispatchTaskEntry ()
#6 0x0806a8e9 in OspTaskTemplateFunc(void*) ()
#7 0x00d4780e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#8 0x002027ee in clone () from /lib/tls/i686/cmov/libc.so.6 
ps + strace  
 
得到进程ID 21465 ps -e |grep cmu 4996 ? 00:00:25 cmu_fjga_sp3 21465 pts/5 00:08:10 cmu
得到线程时间, 其中最占CPU的是 EpollRecvTask 21581
ps -eL |grep 21465
21465 21579 pts/5 00:00:00 CamApp
21465 21580 pts/5 00:00:00 TimerMan Task
21465 21581 pts/5 00:09:02 EpollRecvTask
21465 21582 pts/5 00:00:00
使用 strace -p 21581 得到线程栈  
 
posted @ 2013-09-04 13:27 小马歌 阅读(396) | 评论 (0)编辑 收藏
 
     摘要: from:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html张 建平, 架构师, iSoftStone Co., Ltd简介: Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础技能,Servlet 3.0 是 Servlet 规范的最新版本。本文主要介绍了...  阅读全文
posted @ 2013-08-22 12:45 小马歌 阅读(220) | 评论 (0)编辑 收藏
仅列出标题
共95页: First 上一页 23 24 25 26 27 28 29 30 31 下一页 Last