用GDB调试PHP程序[转] 03月28日

转载自:http://www.sulabs.net/?p=40

我们先想办法重现一下Segmentation fault现象,下面我们先使用Shell的方式来试验,编写demo.sh脚本:

#!/bin/bash
kill -s SEGV $$

其中$$就是脚本的进程号,SEGV信号的作用等同于Segmentation fault,整句基本意思就是让自己崩溃。

保存好,并且加上执行权限:chmod +x demo.sh (更多…)

分布式计算框架 Fourinone[转] 03月15日

FourInOne(中文名字“四不像”)是一个四合一分布式计算框架,在写这个框架之前,我对分布式计算进行了长时间的思考,也看了老外写的其他开源框架,当我们把复杂的hadoop当作一门学科学习时,似乎忘记了我们想解决问题的初衷:我们仅仅是想写个程序把几台甚至更多的机器一起用起来计算,把更多的cpu和内存利用上,来解决我们数量大和计算复杂的问题,当然这个过程中要考虑到分布式的协同和故障处理。如果仅仅是为了实现这个简单的初衷,为什么一切会那么复杂,我觉的自己可以写一个更简单的东西,它不需要过度设计,只需要看上去更酷一点,更小巧一点,功能更强一点。于是我将自己对分布式的理解融入到这个框架中,考虑到底层实现技术的相似性,我将 Hadoop,Zookeeper,MQ,分布式缓存四大主要的分布式计算功能合为一个框架内,对复杂的分布式计算应用进行了大量简化和归纳。 (更多…)

在C里面嵌入Lua的过程[lua研究二] 03月09日

偶遇一个事情,需要在C里面嵌入Lua代码,这真是痛苦了我好久….

不知道为啥lua默认编译没有生成.so 的动态链接库,需要修改Makefile生成liblua.so,我用的版本是5.2

一、先修改根目录的 Makefile
修改一行

TO_LIB= liblua.a liblua.so

二、再修改src的Makefile
注意,请搜索关键字,第二行是需要修改的,第一行,和第三行是粘贴的,至于粘贴的位置嘛,你看样子比较像的就粘贴一起吧
第三行的开始是tab键

LUA_SO=liblua.so
ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
$(LUA_SO): $(CORE_O) $(LIB_O)
$(CC) -o $@ -shared $? -ldl -lm

然后编译,安装,ldconfig

make linux
make install

在/etc/ld.so.conf中加入一行
/usr/local/lib/
然后执行
/sbin/ldconfig
重新加载动态链接库。

三、敲两段代码
luadd.c

#include
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

/* the Lua interpreter */
lua_State* L;

int luaadd ( int x, int y )
{
int sum;

/* the function name */
lua_getglobal(L,"add");

/* the first argument */
lua_pushnumber(L, x);

/* the second argument */
lua_pushnumber(L, y);

/* call the function with 2
arguments, return 1 result */
lua_call(L, 2, 1);
//lua_pcall(L, 2, 1,0);

/* get the result */
sum = (int)lua_tointeger(L, -1);
lua_pop(L, 1);

return sum;
}

int main ( int argc, char *argv[] )
{
int sum;

/* initialize Lua */
//L = lua_open();
L = luaL_newstate();

/* load Lua base libraries */
//luaL_openlibs(L);
luaopen_base(L);

/* load the script */
(void)luaL_dofile(L, "add.lua");

/* call the add function */
sum = luaadd( 10, 15 );

/* print the result */
printf( "The sum is %d\n", sum );

/* cleanup Lua */
lua_close(L);

/* pause */
//printf( "Press enter to exit..." );
//getchar();

return 0;
}

lua代码 add.lua

function add(x,y)
return x+y
end

四、当然是gcc了

gcc luadd.c -llua -ldl -g

五、不出意外的话,当然是出现结果

the sum is 25

希望大家这过程顺利

Lua在linux下的安装[Lua研究一] 03月08日


wget http://www.lua.org/ftp/lua-5.2.0.tar.gz
tar zxvf lua-5.2.0.tar.gz
make linux
make install

然后lua就安装好了,简单快捷

print(“a”);

print(“hello”);

Facebook Scribe介绍【转】 03月06日

Facebook Scribe介绍

——————-

1. 介绍

Scribe是Facebook一个开源的实时分布式日志收集系统。它提高了大规模日志收集的可靠性和可扩展性。你可以在不同的节点上安装Scribe服务,然后这些服务会把收集到的信息发布到中心的服务集群上去。当中心服务不可得到时,本地的Scribe服务会暂时把收集到的信息存储到本地,等中心服务恢复以后再进行信息的上传。中心服务集群可以把收集到的信息写入本地磁盘或者分布式文件系统上,如hdfs,或者分发到另一层的Scribe服务集群上去。

Scribe提供了一种无阻塞的thrift服务,底层依赖libevent库和thrift库的支持。 (更多…)