使用Graphviz时候遇到这样一个问题
IOError: Renderer type: "gif" not recognized. Use one of: canon cmap cmapx dia dot fig hpgl imap ismap mif mp pcl pic plain plain-ext ps ps2 svg svgz vtx xdot
表现在无法生成gif或者png图像
应该是官方一个bug
解决方案:
安装 graphviz-gd
yum search graphviz-gd
========================= Matched: graphviz-gd =========================
graphviz-gd.x86_64 : Graphviz plugin for renderers based on gd
好了,装上这个东西就ok了
posted @ 2014-02-13 13:25 小马歌 阅读(2842) | 评论 (0)编辑 收藏
 

一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。以下是小编搜集整理的一些Nginx 502错误的排查方法,供参考:

  Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的。这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在nginx身上,希望nginx下一个版本会把出错提示写稍微友好一些,至少不会是现在简单的一句 502 Bad Gateway,另外还不忘附上自己的大名。

Nginx 502的触发条件

  502错误最通常的出现情况就是后端主机当机。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了 nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是error timeout。error就是当机、断线之类的,timeout就是读取堵塞超时,比较容易理解。我一般是全写上的:

proxy_next_upstream error timeout invalid_header http_500 http_503;

  不过现在可能我要去掉http_500这一项了,http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本来会打印一堆 stacktrace的错误信息,现在被502取代了。但公司的程序员可不这么认为,他们认定是nginx出现了错误,我实在没空跟他们解释502的原理 了……

503错误就可以保留,因为后端通常是apache resin,如果apache死机就是error,但resin死机,仅仅是503,所以还是有必要保留的。

解决办法

遇到502问题,可以优先考虑按照以下两个步骤去解决。

1、查看当前的PHP FastCGI进程数是否够用:

netstat -anpo | grep "php-cgi" | wc -l

如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。

2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:

http  {
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
......
}
......

  php.ini中memory_limit设低了会出错,修改了php.ini的memory_limit为64M,重启nginx,发现好了,原来是PHP的内存不足了。

  如果这样修改了还解决不了问题,可以参考下面这些方案:

一、max-children和max-requests

  一台服务器上运行着nginx php(fpm) xcache,访问量日均 300W pv左右。

  最近经常会出现这样的情况:php页面打开很慢,cpu使用率突然降至很低,系统负载突然升至很高,查看网卡的流量,也会发现突然降到了很低。这种情况只持续数秒钟就恢复了。

  检查php-fpm的日志文件发现了一些线索。

Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200, cur:51200  Sep 30 08:32:23.290212 [NOTICE] fpm_sockets_init_main(), line 371: using inherited socket fd=10, “127.0.0.1:9000″  Sep 30 08:32:23.290342 [NOTICE] fpm_event_init_main(), line 109: libevent: using epoll  Sep 30 08:32:23.296426 [NOTICE] fpm_init(), line 47: fpm is running, pid 30587

  在这几句的前面,是1000多行的关闭children和开启children的日志。

  原来,php-fpm有一个参数 max_requests,该参数指明了,每个children最多处理多少个请求后便会被关闭,默认的设置是500。因为php是把请求轮询给每个 children,在大流量下,每个childre到达max_requests所用的时间都差不多,这样就造成所有的children基本上在同一时间 被关闭。

  在这期间,nginx无法将php文件转交给php-fpm处理,所以cpu会降至很低(不用处理php,更不用执行sql),而负载会升至很高(关闭和开启children、nginx等待php-fpm),网卡流量也降至很低(nginx无法生成数据传输给客户端)

  解决问题很简单,增加children的数量,并且将 max_requests 设置未 0 或者一个比较大的值:

  打开 /usr/local/php/etc/php-fpm.conf调大以下两个参数(根据服务器实际情况,过大也不行)

<value name="max_children">5120</value>  <value name="max_requests">600</value>

  然后重启php-fpm。

二、增加缓冲区容量大小

  将nginx的error log打开,发现“pstream sent too big header while reading response header from upstream”这样的错误提示。查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。参考老外写的修 改办法增加了缓冲区容量大小设置,502问题彻底解决。后来系统管理员又对参数做了调整只保留了2个设置参数:client head buffer,fastcgi buffer size。

三、request_terminate_timeout

  如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:

request_terminate_timeout

这个值是max_execution_time,就是fast-cgi的执行脚本时间。

0s

0s为关闭,就是无限执行下去。(当时装的时候没仔细看就改了一个数字)问题解决了,执行很长时间也不会出错了。优化fastcgi中,还可以改改这个值5s 看看效果。

php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。

posted @ 2014-02-12 18:48 小马歌 阅读(1094) | 评论 (0)编辑 收藏
 
感谢Rockux的投递
看完之后,终于明白为什么优秀的工程师都去了/想去facebook,因为那里是工程师们的天堂。我对facebook的运转着迷。这是一个很独特的环境,不容易被复制(他们的体系并不适合所有的公司,即使他们努力尝试过)。下面是我和facebook的朋友们关于他们如何开发和管理项目的记录。
现在距离我收集的这些信息又过去6个月了,我相信facebook肯定又对他们的项目开发实践进行了改进。所以这些记录可能会有点过时。同时facebook的工程师驱动文化也越来越为大众所知。非常感谢那些帮助我整理这篇文章的facebook的朋友们。

记录:

  • 截止到2010年6月,facebook有将近2000名员工,10个月前只有1100名,一年之间差不多翻了一番。
  • 两个最大的部门是工程师和运维,每个部门大概都是400-500人。这两个部门人数大约占了公司的一半。
  • 产品经理与工程师的比例大约为1-7到1-10。
  • 每个工程师入职时,都要接收4-6周的培训,通过修补bugs和听高级开发工程师的课程来熟悉facebook。
  • 培训结束后,每个工程师都可以接触线上的数据库(更大的权力意味着更大的责任,也有一份"勿做清单",不然可能会被开,比如共享用户的隐私数据)。
  • 有非常牢靠的安全体系,以免有人不小心/故意做了些不好的事。
  • 每个工程师可以修改facebook的任何代码,随时可以迁入。
  • 浓厚的工程师驱动文化。"产品经理基本可以被忽略",这是facebook一名员工的话。工程师可以修改流程的细节,重新安排工作任务,随时植入自己的想法。
  • 在每月的跨部门会议上,由工程师来汇报工作进度,市场部和产品经理会出席会议,也可以做些简短的发言,但如果说得太多,很可能就会被打小报告。他们确实想让工程师来主导产品的开发,对自己的产品负责。
  • 项目需要的资源都是自愿的
  • 一个产品经理把工程师们召集到一起,让他们对他的想法产生兴趣。
  • 工程师们决定开发那些让他们感兴趣的特性。
  • 工程师跟他们的经理说:"我下周想开发这5个新特性"。
  • 经理会让工程师独立开发,可能有时会让他优先完成一些特性。
  • 工程师独立完成所有的特性——前端/后端/数据库,等等所有相关的部分。如果需要得到设计人员的帮助,需要先让设计人员对你的想法产生兴趣。其他如架构之类的也一样。但总体来说,工程师要独立完成所有的任务。
  • 对于某个特性是否值得开发的争论,通常是这么解决的:花一个星期的时间完成他,并在小部分人群中(如1%)进行测试。
  • 工程师常常希望解决难题,这能获得声望和尊敬。他们很难对前端项目或UI设计产生太大的兴趣。这跟其他公司可能正好相反。在facebook,后端任务,比如新的feed算法,广告投放算法,memcache优化等等,是工程师真正感兴趣的。
  • 所有的代码修改都要进行审核(通过一个或多个工程师),但News Feed是个例外,因为太重要了,Zuckerberg会亲自review。
  • 所有的修改至少要被一个人审核,而且这个系统可以让任何人很方便地审核其他人的代码,即使你没有邀请他
  • 工程师负责测试,代码修复,和维护自己的项目。
  • 每个办公室或通过VPN连接的员工会使用下一版的facebook,这个版本的facebook会经常更新,通常比公开的早1-12小时。所有的员工被强烈建议提交bugs,而且通常会很快被修复。
  • 很奇怪只有很少的QA或自动测试——"大部分工程师都能写出基本没有bug的代码,只是在其他公司他们不需要这么做。如果有QA部门,他们只要把代码写完,扔给他们就行了"
  • [针对上一条]我们有自动测试,代码发布前必须要通过测试。我们不相信"所有的工程师都能写出没有bug的代码",毕竟这是一个商业公司。
  • 很奇怪,缺少产品经理的影响和控制——产品经理是很独立的和自由的。产生影响力的关键是与工程师和工程师的领导们们搞好关系。需要大致了解技术,不要提一些愚蠢的想法。
  • 所有提交的代码每周二打包一次。
  • 只要多一分努力,终于一天会发生改变。
  • 星期二的代码发布,需要所有的提交过代码的工程师在场。
  • 代码打包前,工程师必须在一个特殊的IRC channel上。
  • 运维执行打包过程
  • facebook有大约60000台服务器
  • 有9个代码发布级别
  • 最小的级别只有6台服务器
  • 星期二的代码发布会先发布到6台服务器上,运维组会检测这6台服务器的反应,保证代码正常工作,然后再提交到下一级
  • 如果发布出现了一些问题(如报错等等),那么就停止下一级的部署,提交出错代码的工程师负责修复问题,然后从头继续发布。
  • 所以一次发布可能会经历几次重复:1-2-3-fix. 回到1. 1-2-3-4-5-fix. 回到1. 1-2-3-4-5-6-7-8-9
  • 运维组是受过严格训练,倍受尊敬,而且有商业意识的。他们的工作包括分析错误日志,负载和内存状态等等。还包括用户行为。
  • 代码发布期间,运维组使用IRC-based页面系统,可以通过facebook/email/irc/im/sms ping每一个工程师,如果需要他们注意的话。对运维组不做回应是一件很羞愧的事。
  • 代码一旦发布到第9级,并且稳定运行,就算发布成功了。
  • 如果一个特性没有按时完成,也没什么大不了的,下次完成时一并发布即可。
  • 如果被svn-blamed,public shamed或工作经常疏忽就很可能被开除。"这是一个高效的文化"。不够高效或者不够聪明的员工会被剔除。管理层会在6个月的时间里观察你表现,如果不合格,只能说再见。每一级都是这个待遇,即使是C级别和VP级别,如果不够高效,也会被开除。
  • 被责骂不会导致解雇。我们特别尊重别人,原谅别人。大部分高级工程师都或多或少犯过一些严重的错误,包括我。但没有人因此被解雇。
  • 我也没有遇到过因为上面提到过的犯错误而被解雇。有些人犯了错,他们会非常努力地去修复,也让其他人得到了学习。
posted @ 2014-01-23 15:21 小马歌 阅读(339) | 评论 (0)编辑 收藏
 
PHPUnit
是一个轻量级的PHP测试框架。它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计)

单元测试是几个现代敏捷开发方法的基础,使得PHPUnit成为许多大型PHP项目的关键工具。这个工具也可以被Xdebug扩展用来生成代码覆盖率报告 ,并且可以与phing集成来自动测试,最合它还可以和Selenium整合来完成大型的自动化集成测试。
资料:http://phpunit.de/documentation.html

2 composer
项目依赖管理工具 资料:http://getcomposer.org/doc/00-intro.md#installation-nix

3
 syslog-ng  
集中日志服务器,相比syslog更有优势 资料:http://www.gaizaoren.org/archives/428

posted @ 2014-01-23 11:24 小马歌 阅读(279) | 评论 (0)编辑 收藏
 

转自:http://my.oschina.net/u/200745/blog/36662

1.引用文件方式

对include()来说,在include()执行时文件每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。另一方面,如果每次执行代码时相读取不同的文件,或者有通过一组文件叠代的循环,就使用include(),因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量。

 2.是否有条件引用

在PHP变成中,include()与require()的功能相同,但在用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面的一个例子中,如果变量$somgthing为真,则将包含文件somefile:
if($something){
include("somefile");
}
但不管$something取何值,下面的代码将把文件somefile包含进文件里:
if($something){
require("somefile");
}
下面的这个有趣的例子充分说明了这两个函数之间的不同。
$i = 1;
while ($i < 3) {
require("somefile.$i");
$i++;
}
在这段代码中,每一次循环的时候,程序都将把同一个文件包含进去。很显然这不是程序员的初衷,从代码中我们可以看出这段代码希望在每次循环时,将不同的文件包含进来。如果要完成这个功能,必须求助函数include():
$i = 1;
while ($i < 3) {
include("somefile.$i");
$i++;
}

 

3.报错

 

用例子来说话,写两个php文件,名字为test1.php  和test2.php,注意相同的目录中,不要存在一个名字是test999.php的文件。
test.php
<?PHP
include  (”test999.php”);
echo  “abc”;
?>

test2.php
<?PHP
require (”test999.php”)
echo  “abc”;
?>

浏览第一个文件,因为没有找到test999.php文件,我们看到了报错信息,同时,报错信息的下边显示了abc,你看到的可能是类似下边的情况:
Warning: include(test1aaa.php) [function.include]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2

Warning: include() [function.include]: Failed opening ‘test1aaa.php’ for inclusion (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2
abc

浏览第二个文件,因为没有找到test999.php文件,我们看到了报错信息,但是,报错信息的下边没有显示abc,你看到的可能是类似下边的情况:
Warning: require(test1aaa.php) [function.require]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2

Fatal error: require() [function.require]: Failed opening required ‘test1aaa.php’ (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2

现在就能很清楚的知道include和require的区别:include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码,require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。

posted @ 2013-12-25 20:53 小马歌 阅读(247) | 评论 (0)编辑 收藏
 
     摘要: from:http://www.searchtb.com/2012/06/rolling-curl-best-practices.html在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, 为了提高性能, 可以采用cURL提供的curl_multi_*族函数实现简单的并发.本文将探讨两种具体的实现方...  阅读全文
posted @ 2013-12-13 14:15 小马歌 阅读(464) | 评论 (0)编辑 收藏
 
摘要:Polymer是由原Palm webOS开发Enyo框架的团队加盟Google后打造的,基于Shadow DOM、Custom Elements、MDV等最新浏览器特性,支持Web Components。

今年的Google I/O大会,绝对是一场为开发者所准备的盛会发布多个软件产品与服务,并且主要以发布平台和服务为主,比如让Android开发者称赞的Android Studio、推出Google Play Game服务、对地图进行重大升级等。而在Web平台领域,Google则发布了最新的Web UI库Polymer。

Polymer基于Shadow DOM、Custom Elements、MDV等最新浏览器特性,代表了下一代Web框架的方向:一切皆组件、尽量减少代码量、尽量减少框架限制。由加盟Google的原Palm webOS开发团队打造。

 

架构图

快速入门

1.把项目拷贝到解决方案的根目录文件夹中,参考 Get the code

1
git clone git://github.com/Polymer/polymer.git --recursive
2.启动Web服务器

3.在主页面引用polymer.js

1
<script src="Polymer/polymer.js"></script>
4.阅读开始指南

5.学习如何使用Polymer内核快速搭建Web组件

6.玩转toolkit-ui示例(必须在Web服务器上运行)

7.加入mailing list,提问并且得到相应地回复。

Polymer内核

Polymer内核代码由polymer.js这个文件提供,其提供了一个薄层代码来表示Polymer选项,并且提供了所有组件使用的糖。

  1. 组件声明
  2. Web组件声明代码如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    <element name="tag-name">
    <template>
    <!-- shadow DOM here -->
    </template>
    <script>
    // lifecycle setup here
    </script>
    </element>

    在该组件中添加Polymer.register生命周期来初始化组件的<script>块,如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    <font face="Menlo, Monaco, monospace, sans-serif"><element name="tag-name">
      <template>
        <!-- shadow DOM here -->
      </template>
      <script>
        Polymer.register(this);
      </script>
    </element></font>

  3. 元素初始化
  4. 第一个参数Polymer.register是引用到<element>元素里的,因为脚本在element标记里运行,所以参数就设为“this”。

    你可以提供第二个对象参数到Polymer.register里去定义对象原型,在下面的代码里,该组件初始化了一个message属性和ready方法。

    1
    2
    3
    4
    5
    6
    Polymer.register(this, {
    message: "Hello!",
    ready: function() {
    // component is ready now, we can do stuff
    }
    });

目前,Polymer还处于初期阶段,它和其他框架一样,尽可能地拥抱HTML。它的目标是通过使用像Custom Elements和Shadow DOM这些新兴的Web标准的少量独立polyfill发展Web平台。此外,应用于移动平台也是其中的核心目标之一。Polymer开发团队正在研究响应式组件,让其可以正确无误地在台式机、平板电脑、手机上进行自动化配置。

当然,Polymer的诞生也意味着Google现在有三个相互竞争的Web应用开发库:Polymer、Dart(也具有UI开发功能)和AngularJS。

对于Polymer,开发者有哪些话要说呢?让我们一起来看下:

清风一二两:Palm webOS用另一种方式重生?

三合一赵:Enyo的Google版~换汤不换药~

刘晗的微博:在HTML领域离标准太远自己搞一套,出路不大。特别是像这种绑定机制,貌似理念是MVC,但MVC这种东西做简单页面还行。

eldude:声明性质、封装、数据绑定、属性和事件驱动API这些都是数量级的,要比现有JavaScript/HTML UI组件简单。

neilk:这个框架看起来非常酷,但“built by Google”有点用词不当,像Closure或Angular、Polymer等这些都Google内部使用的技术,在经过千锤百炼后才像面向公众,因此称作 "technologies by Googlers"更为合适。

相关资料

Polymer主页: http://www.polymer-project.org/

项目主页上的FAQ描述比较清晰: http://www.polymer-project.org/faq.html 

架构图: http://www.polymer-project.org/images/architecture-diagram.svg?20130516

GitHub: https://github.com/polymer/polymer 

本文为CSDN编译整理,未经允许不得转载,如需转载请联系market#csdn.net(#换成@)

posted @ 2013-12-04 15:20 小马歌 阅读(421) | 评论 (0)编辑 收藏
 

互联网公司linux运维生产场景常用软件工具一览,同时补充了个别常用但不是开源的软件。

下午受邀请参加了一个BBS活动,于是有了下面的内容。
下面是在linux网站运维方向老男孩最近几年常用的免费的开源软件,临时即兴想起来的,在这里和大家分享,希望给初学者指引一点路。
linux的世界真的很精彩,还没入门的朋友赶紧进来吧!

操作系统:Centos※,Freebsd,Ubuntu,Redhatlinux,suselinux
网站服务:apache※,nginx,lighttpd,php※,tomcat※,resin
数据库:Mysql※,PostgreSQL,Mysql-proxy,MariaDB
代理相关:lvs,keepalived,haproxy,nginx,apache,heartbeat(此行都是※)
网站缓存:squid※,nginx※,varnish
内存缓存:memcached※,memcachedb,TokyoTyrant※,MongoDB,Cassandra※,redis※,tair,CouchDB
存储相关:Nfs※,Moosefs※,Hadoop※,gfs※,lustre,FastDFS
版本管理:cvs,svn※,git
监控报警:mboy,mrtg,nagios,cacti,zabbix,munin,hyperic
域名解析:bind,powerdns,dnsmq
同步软件:rsync,inotify,sersync,drbd,csync2,union,lsyncd,scp(此行都是※)
分发工具:Secboy,expect※,puppet※,cfengine※,ssh+rsync+sersync
虚拟软件:xen,kvm
内网软件:iptables,zebra,iftraf,ntop,tc,iftop
邮件软件:qmail※,posfix※,sendmail
远程拨号:openvpn,pptp,openswan,ipip
统一认证:ldap(可结合微软活动目录)
队列工具:ActiveMQ※,RabbitMQ,MemcacheQ
打包发布:mvn,ants,jenkins
测试软件:apacheab,smokeping,siege,JMeter,Webbench,LoadRunner(此行都是
日志相关:syslog,rsyslog,Awstats
DB代理:mysql-proxy,amoeba(更多还是程序实现读写分离)
搜索软件:Sphinx,Xapian(大公司会自己开发类似百度的小规模内部搜索引擎)

提示:
1)以上所有软件都是老男孩用过或测试过的。
2)带的为老男孩最近几年用的比较多,可信任使用的。也是近年来linux运维的大众。
3)有了功能分类和软件名,大家有需求,可以按功能找软件直接G就知道了。

4)学习要有舍有得,什么都抓必然短时间都不会精,希望大家能抓重点,抓精髓,大众软件(带)先熟练了,这是基础加提高,在研究小众软件(不带),这是高手之路,最后在研究偏门的,世外高手之路,当然前提是先掌握前面的大众和小众。
5)当然还有一些没有大众开源的有一些也很棒,如审计堡垒机程序。

还有用的多的,老男孩落下的,大家补充啊。

本文出自 “老男孩linux运维” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/775056

posted @ 2013-11-07 16:12 小马歌 阅读(408) | 评论 (0)编辑 收藏
 

Memcached资源很容易混淆,所以我打包好了.
下载地址: http://www.euphie.net/downloads/memcached.tar.gz
下载后解压,里面有几个包:
1.memcached-1.4.15 //Memcached服务端.
2.memcached-2.1.0 //PHP的Memcached扩展,其实Memcached扩展有两种,还有一种叫Memcache,不过Memcached比Memcache功能更强大.
3.libevent-2.0.21-stable //Memcached服务端的依赖包.
4.libmemcached-1.0.16 //Memcached扩展的依赖包.

一,安装Libevent

#cd libevent-2.0.21-stable #./configure -prefix=/usr/local/libevent #make #make install

二,安装Memcached服务端

#cd memcached-1.4.15 #./configure -prefix=/usr/local/memcached  -with-libevent=/usr/local/libevent #make #make install

三,启动Memcached服务

#/usr/local/memcached/bin/memcached -d -m 50  -u root -p 12000 -c 256 -P /tmp/memcached.pid

注:
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB.
-u是运行Memcache的用户.
-l是监听的服务器IP地址,我这里没有填.
-p是设置Memcache监听的端口.
-c选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定.
-P是设置保存Memcache的pid文件.

四,安装Libmemcached

#cd libmemcached-1.0.16 #./configure -prefix=/usr/local/libmemcached  -with-memcached=/usr/local/memcached/bin/memcached #make #make install

注:
如果报”./libmemcached-1.0/memcached.h:46:27: error: tr1/cinttypes: No such file or directory”错误,则需要升级gcc版本.

五,安装Memcached PHP扩展

#cd memcached-2.1.0 找到phpize和php-config的路径,我的分别是/usr/local/bin/phpize和/usr/bin/php-config. #/usr/local/bin/phpize #./configure --with-php-config=/usr/bin/php-config  --with-libmemcached-dir=/usr/local/libmemcached #make #make install 安装成功后会生成memcached.so,把路径加到php.ini的extension=xxx里.
posted @ 2013-09-27 14:25 小马歌 阅读(524) | 评论 (0)编辑 收藏
 
信号产生方式对进程的影响
sigint通过ctrl+c将会对当进程发送此信号信号被当前进程树接收到,也就是说,不仅当前进程会收到信号,它的子进程也会收到
sigtermkill命令不加参数就是发送这个信号只有当前进程收到信号,子进程不会收到。如果当前进程被kill了,那么它的子进程的父进程将会是init,也就是pid为1的进程

SIGQUIT
和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。

SIGSTOP
停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.

SIGKILL
强制杀死

头文件信号详解
/* Signals.  */
#define SIGHUP          1       /* Hangup (POSIX).  */
#define SIGINT          2       /* Interrupt (ANSI).  */
#define SIGQUIT         3       /* Quit (POSIX).  */
#define SIGILL          4       /* Illegal instruction (ANSI).  */
#define SIGTRAP         5       /* Trace trap (POSIX).  */
#define SIGABRT         6       /* Abort (ANSI).  */
#define SIGIOT          6       /* IOT trap (4.2 BSD).  */
#define SIGBUS          7       /* BUS error (4.2 BSD).  */
#define SIGFPE          8       /* Floating-point exception (ANSI).  */
#define SIGKILL         9       /* Kill, unblockable (POSIX).  */
#define SIGUSR1         10      /* User-defined signal 1 (POSIX).  */
#define SIGSEGV         11      /* Segmentation violation (ANSI).  */
#define SIGUSR2         12      /* User-defined signal 2 (POSIX).  */
#define SIGPIPE         13      /* Broken pipe (POSIX).  */
#define SIGALRM         14      /* Alarm clock (POSIX).  */
#define SIGTERM         15      /* Termination (ANSI).  */
#define SIGSTKFLT       16      /* Stack fault.  */
#define SIGCLD          SIGCHLD /* Same as SIGCHLD (System V).  */
#define SIGCHLD         17      /* Child status has changed (POSIX).  */
#define SIGCONT         18      /* Continue (POSIX).  */
#define SIGSTOP         19      /* Stop, unblockable (POSIX).  */
#define SIGTSTP         20      /* Keyboard stop (POSIX).  */
#define SIGTTIN         21      /* Background read from tty (POSIX).  */
#define SIGTTOU         22      /* Background write to tty (POSIX).  */
#define SIGURG          23      /* Urgent condition on socket (4.2 BSD).  */
#define SIGXCPU         24      /* CPU limit exceeded (4.2 BSD).  */
#define SIGXFSZ         25      /* File size limit exceeded (4.2 BSD).  */
#define SIGVTALRM       26      /* Virtual alarm clock (4.2 BSD).  */
#define SIGPROF         27      /* Profiling alarm clock (4.2 BSD).  */
#define SIGWINCH        28      /* Window size change (4.3 BSD, Sun).  */
#define SIGPOLL         SIGIO   /* Pollable event occurred (System V).  */
#define SIGIO           29      /* I/O now possible (4.2 BSD).  */
#define SIGPWR          30      /* Power failure restart (System V).  */
#define SIGSYS          31      /* Bad system call.  */
#define SIGUNUSED       31
posted @ 2013-09-26 12:39 小马歌 阅读(299) | 评论 (0)编辑 收藏
仅列出标题
共95页: First 上一页 22 23 24 25 26 27 28 29 30 下一页 Last