Monthly Archives: April 2009

Technique Fashion

OK, I’ve got nothing to say.. other than concepts.

其实不得不承认,任何时候,这个世界都和时髦脱不了干系。

时髦的人,时髦的事,时髦的穿法,时髦的口头禅。

现在的社会习惯于制造准则,创造一大批没有个性,善于重复的高效人才。恩。是的,当你觉得很好的时候,不妨检查下是不是已经符合所有别人准则,于是已经不是自己。

扯远了。其实我要说的是收到的一封邮件,提到了以下四个名词。

BPMN

业务过程建模标记法(英文:Business Process Modeling Notation,简称:BPMN)[译注1]工作流中特定业务过程图形化表示法。它由业务过程管理倡议组织(英文:Business Process Management Initiative,简称:BPMI)开发,该组织已于2005年与对象管理组织(英文:Object Management Group,简称:OMG)合并,从那时起,BPMN由OMG维护。BPMN当前版本为1.2,2009年1月发布,有重要修改的2.0版本正在进行中。

当前国内的流程管理还仅仅限于工作流范围,各家厂商都在吹嘘自己的产品。其实说实在的,都不咋的。原因很简单,流程化的业务实现,类似于上个世纪初的流水线改造,类似于ERP的实施,是需要整个行业理念的更新换代的。哪怕是IT应用最为广泛的金融和电信产业,也未达到这个程度。所以,管理业务的流程化,还只是一个构想,自然不会有成熟的产品。

至于BPMN这种基于业务层面的整合,那就更遥远了。之所以看好BPMN,在于其可以足够简化,这就为不同层面的沟通架构了桥梁。不至于离题太远。事实证明,规范是促进沟通效率的最有效手段。不指望BPMN变成人人理解的东西,但至少能够象UML一样深入人心。虽然我觉得90%的人根本就不理解UML和ER图。

Scrum

Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。Scrum在英语的意思是橄榄球里的争球。

虽然Scrum是为管理软件开发项目而开发的,它同样可以用于运行软件维护团队,或者作为计划管理方法:Scrum of Scrums.

Scrum最吸引人的地方,在于它的自然。机会是项目管理中最自然的方式:提出目标,跟踪进度,协调资源。

Scrum就好象是项目管理中的即兴演讲,在短时间内提出并勾勒解决问题的蓝图,在一个小的团队有针对性的解决问题。非常适合于加速里程碑式的目标。简单实用。

其实Scrum可以应用于软件项目管理以外更多的方面。因为它很切合目标定义的SMART原则,或者说,更像是团队SMART的实施。通常来说,越是简单的有效的原理,就越有时间的价值。不过值得注意的是,简单的东西并不意味着浅显,需要不断深入的思考来发掘其潜在价值。

BIRT and BI

商业智能,又称商业智慧商务智能,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析以实现商业价值。

商业智能的概念经由Howard Dresner(1989年)的通俗化而被人们广泛了解。当时将商业智能定义为一类由数据仓库(或数据集市)、查询报表、数据分析、数据挖掘、数据备份和恢复等部分组成的、以帮助企业决策为目的技术及其应用。

商业智能又是一个这几年被用烂的词汇。原因就是其很低的门槛和看起来很美的前景。

大多数通常意义的商业智能实现都变成了一个报表工具。大多数ETL都只有OLTP的功能。大多数的数据仓库只能叫做数据批发市场。

原因就是,这太难了。

好用且可实现的数据仓库,必然是基于业务的充分理解的;可实现且可用的分析模型,必然需要长期的经验模型,基于数据分析和挖掘理论的有效实践。对于一个技术人员来讲,最直接的观感大概就是简化数据展现的实现,也就是做报表。

而实际上,这种好看的东西是没有商业价值的,好看之后,也只有好看而已。

数据的价值,一个是完整和真实,另外一个层面就是效率和附加值。

数据产生数据的同时,如果原始数据到数据之间的转换产生太多的效率问题,就无高效的产生数据的附加值,进而影响数据系统的价值。

NGCS

呃,还有一个是Flex,这东西不想多说了,谁知道过几年会被什么东西替代。

但是觉得渐渐BS架构遇到了越来越多的瓶颈。新一代的CS,NGCS?其实有很多可以实践的课题。诸如Adobe AIR, FLEX, XUL, XFORM, 个人觉得都是这方面的一个努力。创造一个跨平台的,可用的Client环境,弥补目前HTML标准的不足,同时不丧失BS结构的优势。

对于定制性更强的企业软件来讲,其实可以先行一步,通过主动转变来提供更优的客户体验,占领市场。

呃。我真的非常善于瞎说。喜欢的看看,对味的评评,反对的驳驳,这都挺好。

Linux编译PHP问题整理

对于Linux我是个新手,更希望使用Debain的Apt的库解决。没办法用了Red Hat,虽然最终装了Apt但是库包实在太少,无奈之下,只好手工编译。

遇到的问题其实主要原因有两个:一个是RHEL所带的包不能满足要求;还有一个就是Make安装的设置不正确。

关于Make,这里有篇文章简单易懂《Linux编译套件》。

Linux默认安装目录

一般情况下GNU规范的构建都会安装到 /usr/local目录下。但是很多系统服务组件,习惯于到 /usr目录下,这时候,我们就需要设置路径参数。如

./configure –prefix=/usr

错误举例

ext/iconv/iconv.o: In function `_php_iconv_mime_encode':
/home/ryan/php-5.2.9/ext/iconv/iconv.c:1043: undefined reference to `libiconv_open'

http://ru2.php.net/manual/en/ref.iconv.php#23700

错误原因:PHP构建参数不正确,应当根据安装iconv时配置设定,如: ‘–with-iconv=/usr’

./configure ‘–with-iconv=/usr’

配置检查失败:需要下载对应的软件包

正确的构建顺序

  1. wget phpXX.gz
  2. 解压缩程序
  3. 进入目录,执行 ./configure {其他参数}
  4. 发现错误:通常需要下载和安装对应组件包,安装成功后重复3
  5. 没有错误:执行 make clean
  6. 执行 make
  7. 发现错误:通常需要下载和安装对应组件包,安装成功后重复5
  8. 执行 make install

以下为参考的样例安装配置

配置Apache2

./configure --prefix=/usr/local/apache
	--enable-so
	--enable-cgi
	--enable-info
	--enable-rewrite
	--enable-speling
	--enable-usertrack
	--enable-deflate
	--enable-ssl
	--enable-mime-magic

配置PHP

./configure ‘–with-apxs2=/usr/local/apache2/bin/apxs’ ‘–build=i686-redhat-linux-gnu’ ‘–host=i686-redhat-linux-gnu’ ‘–target=i386-redhat-linux-gnu’ ‘–program-prefix=’ ‘–prefix=/usr’ ‘–exec-prefix=/usr’ ‘–bindir=/usr/bin’ ‘–sbindir=/usr/sbin’ ‘–sysconfdir=/etc’ ‘–datadir=/usr/share’ ‘–includedir=/usr/include’ ‘–libdir=/usr/lib’ ‘–libexecdir=/usr/libexec’ ‘–localstatedir=/var’ ‘–sharedstatedir=/usr/com’ ‘–mandir=/usr/share/man’ ‘–infodir=/usr/share/info’ ‘–cache-file=../config.cache’ ‘–with-libdir=lib’ ‘–with-config-file-path=/etc’ ‘–with-config-file-scan-dir=/etc/php.d’ ‘–disable-debug’ ‘–with-pic’ ‘–disable-rpath’ ‘–without-pear’ ‘–with-bz2′ ‘–with-curl’ ‘–with-exec-dir=/usr/bin’ ‘–with-freetype-dir=/usr’ ‘–with-png-dir=/usr’ ‘–enable-gd-native-ttf’ ‘–without-gdbm’ ‘–with-gettext’ ‘–with-gmp’ ‘–with-iconv=/usr’ ‘–with-jpeg-dir=/usr’ ‘–with-png’ ‘–with-expat-dir=/usr’ ‘–with-pcre-regex=/usr’ ‘–with-zlib’ ‘–with-layout=GNU’ ‘–enable-exif”–enable-magic-quotes’ ‘–enable-sockets’ ‘–enable-sysvsem’ ‘–enable-sysvshm’ ‘–enable-sysvmsg’ ‘–enable-track-vars’ ‘–enable-trans-sid’ ‘–enable-yp’ ‘–enable-wddx’ ‘–with-kerberos’ ‘–enable-ucd-snmp-hack’ ‘–enable-memory-limit’ ‘–enable-shmop’ ‘–enable-calendar’ ‘–enable-dbx’ ‘–enable-dio’ ‘–enable-so’ ‘–with-mime-magic=/usr/share/file/magic.mime’ ‘–without-sqlite’ ‘–with-libxml-dir=/usr’ ‘–with-xml’ ‘–with-system-tzdata’ ‘–enable-force-cgi-redirect’ ‘–enable-pcntl’ ‘–enable-mbstring=shared’ ‘–enable-mbstr-enc-trans’ ‘–enable-mbregex’ ‘–with-ncurses=shared’ ‘–with-gd=shared’ ‘–enable-bcmath=shared’ ‘–enable-dba=shared’ ‘–with-db4=/usr’ ‘–with-xmlrpc=shared’ ‘–with-mysql=/usr/bin/mysql_config’ ‘–with-mysqli=/usr/bin/mysql_config’ ‘–enable-dom=shared’ ‘–with-dom-xslt=/usr’ ‘–with-dom-exslt=/usr’ ‘–enable-soap=shared’ ‘–with-xsl=shared,/usr’ ‘–enable-xmlreader=shared’ ‘–enable-xmlwriter=shared’ ‘–enable-fastcgi’

Apache性能调优

说来不好意思,服务器的性能一直都是个大问题,访问量不大,却经常死机。

调优了很多次,也没什么效果。

晚上加晚班,现在无事,又搜索了一番,修改了下,这下貌似有效果了,分享如下。

问题描述

RHL Linux 5.0 + Apache Httpd 2.2 + Mysql5.0 + PHP 5.0 环境

问题描述:服务器运行若干时间后,会无法响应请求,分析日志文件和进程,有如下情况

  1. 大量的404错误:盗链和后续处理有关
  2. 一些比较奇怪的Apache程序异常
    [Sat Apr 25 02:06:40 2009] [notice] child pid 5534 exit signal Floating point exception (8)
    [Sat Apr 25 02:06:41 2009] [notice] child pid 5499 exit signal Floating point exception (8)
    [Sat Apr 25 02:06:41 2009] [notice] child pid 5527 exit signal Floating point exception (8)
    ………
    强制重启进程时还有*** glibc detected *** /usr/sbin/httpd: free(): invalid pointer: 0×00359170 ***
    *** glibc detected *** /usr/sbin/httpd: free(): invalid pointer: 0×00359170 ***
  3. 系统负载平衡很高,甚至达到60
  4. CPU使用很高,物理内存使用达到90%,交换内存也将近满了
  5. 有大量的Apache Httpd进程,且多为Sleeping状态

原因分析

常见的引起服务器不稳定的原因:

  1. 程序问题引起的内存泄漏
  2. 不恰当的配置导致资源死锁

关于Apache Httpd的调优,有很多说法,不过个人推荐两篇文章,应该是通俗易懂的,呃,E文

Open Source: Configuring Apache – Don’t Succumb To The “Slashdot Effect” http://blogcritics.org/archives/2006/01/27/175740.php

Tuning Apache, part 1 http://virtualthreads.blogspot.com/2006_01_01_archive.html

还有有中文的

Apache Prefork和Worker模式性能比较

http://www.5dlinux.com/article/9/2009/linux_29722.html

官方文档的中文翻译 性能方面的提示

http://lamp.linux.gov.cn/Apache/ApacheMenu/misc/perf-tuning.html

说说对上面两个问题的方案。

内存泄漏。程序哪里错了,不好说,得跟踪定位,每个系统都有内存跟踪的工具,除此之外还要分析日志,可以通过Apache的日志配置来跟踪脚本运行的时间,找出可能的元凶。

除此之外,还有个很土的办法:定时重启。实在没招了可以参考。

服务器的配置么,那更有说法了。Apache httpd默认是Prefork模式(参考上面),这里就是论事的介绍几个参数:事实上我只是简单摘译一下上面的某篇文章,后面的设置是作者的推荐值,中文里面是我的推荐

  • MaxKeepAliveRequests 0 The KeepAlive directive in httpd.conf allows persistent connections to the web server, so that new connection does not have to be initiated for each request. Setting the MaxKeepAliveRequests directive to 0 enables unlimited number of requests per connection, which makes sense if you think about it. Why allow persistent connections but then terminate them after a short period of time?
  • 最大保持连接请求数:0 – 无限制。保持连接意味着不必为同一客户端的多次请求重新释放和分配资源,也意味着这些资源不会马上释放。这在现在这个Ajax漫天飞,外加无数图片和JS的时代很重要,但是如果控制不好资源的保持与释放,就意味着系统资源的耗尽。不过这里只是能复用的请求数,无限就好了。
  • KeepAliveTimeout 15
    Because persistent connections are allowed, it is important that they are not kept open indefinitely. This directive will close the connection after 15 seconds of inactivity.
  • 保持连接超时 3 秒
    如果连接请求无活动,就有必要关掉它,默认15秒太长了点,3秒钟就够了。
  • MinSpareServers 15
    This is the minimum number of spare servers you want running at any given time. This way, if multiple simultaneous requests are received there will already be child processes running to handle them. Setting this number too high is a waste of system resources and setting it too low will cause the system to slow down.
  • MaxSpareServers 65
    Same as above, but the maximum child processes running at any given time.
  • StartServers 15
    This is the number of servers Apache will start initially. As more servers handle requests a minimum of 15 spare servers will run up to the maximum of 64.
  • 上面这三个参数放在一起说:其实就是Apache用于响应用户的子进程,一般一个子进程消耗20M左右内存,上面三个数字可以控制子进程的数量。于是根据可用的系统资源,就可以计算出个合理的取值了。
  • MaxClients 500
    This is the maximum number of simultaneous clients that can connect to the server at any given time. Setting this number too low will result in users being locked out of the server under normal traffic situations and setting it too high will result in your server being so overloaded that all the requests timeout anyway. I think 500 is about right for most people’s needs.
  • 最大客户端,其实就是并发处理量,这也要根据情况来配置,太大会导致服务器崩溃,太小会导致请求排队,响应缓慢。
  • MaxRequestsPerChild 100000
    Sets the maximum number of requests each child process will handle. This is mostly to prevent memory leaks and other mishaps but is important nonetheless. Setting this too low will cause a large portion of child processes to end for no real reason, thus slowing down the site. This could be set to 0 (unlimited) but that would negate any protection from valid issues like memory leaks.
  • 每个子进程可以处理的最多请求。做限制的好处就是,如果某个程序内存泄漏,那么一段时间后就可以把它释放掉。限制小会导致频繁创建进程,拖慢系统。
  • HostnameLookups off
    This prevents DNS lookups of all the visitors to the site, I am pretty sure it’s off by default. If it’s on in your httpd.conf I would recommend turning it off.这没啥好说的

默认的配置

<IfModule prefork.c>

ServerLimit 10000
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 10000
MaxRequestsPerChild 0
</IfModule>

这个默认配置的缺点就是不能防止内存泄漏,结合KeepAlive的设置,占用过多资源。

KeepAlive on
KeepAliveTimeout 2
MaxKeepAliveRequests 0
MaxClients 150
MinSpareServers 5
MaxSpareServers 12
StartServers 5
MaxRequestsPerChild 100000

较短的保持连接释放,有利于应对无效的盗链请求。

客户端限制用于保护服务器正常运行。

实验继续进行中,本文将不定期更新。

还活着

“这些事情你自己解决,去哪里无所谓,只有还活着就行了。”

一句玩笑点出了事情的实质,姐姐,您还真是犀利啊。

继续在全国各地游荡,电话号码都不好意思给人说。

人人都在忙,忙房子忙车忙GF忙上天忙入地忙GDP忙纠结;

不忙不充实,忙过了头也是空虚。

 

再次被人说没事文青。

乃们怎么就看不透我这忧郁而略带喜感的文风呢。

多么具有超现实主义的传统青年啊。

我很传统,不用细看都能出来,这是真的。

 

以下是口水话总结,其实以上也是。

 

最近研习了某心理学书籍的前几章。

重点关注了基本的社会心理行为和以及相互作用。

结合最近几月的生产生活实际,死记硬背铭心刻骨的给自己两个字:

原则

或者用术语来说,基于客观认知的主观态度,及贯彻的行动。

或者在具体说,决定要做的事情,就要冷静分析,坚持到底,不要因为似是而非的外界因素影响而改变。

或者更具体来说,孩子,你没多少时间瞎折腾了。

 

前些日子,不,很前些日子。

整理了FB的播放列表,单独列出了百听不厌的60多首歌。

每首都能多少说出个故事,累积下来。

这么几年,竟然可以有这么多故事。

一不留神还能回到十几年前。

不是念旧,只是没有更好的东西喜欢。

那我是喜新么?

任何事情都可以有个评价标准。

标准不一样,得分不一样。

而且还不是二维的,视点不一样权重也不一样。

所以我不喜新也不念旧,只是不想单调了。