Archive

Archive for November, 2009

从忍者的生活中学到的投资知识

November 25th, 2009 CoCoWool No comments

第一,入市前认真学习技艺,至少要了解人类投机史上都发生过那些主要事件,有哪些投资流派,自己又准备走哪一条路,一旦决定了要走的路,就要小规模介入市场,边感受、边总结经验、边继续学习理论知识,在此基础上,确定自己的投资哲学和交易系统;

第二,严格按照事前确定的战略战术投入战斗,不因盘面的随机波动而改变自己的作战模式;

第三,尽可能在有利于自己获胜的情况下出击,争取一击即中,而不是一而再再而三地试错;

第四,作战时机不对或者条件不具备时,则要耐心地等待最有利的时机出现,不可盲动;

第五,事前考虑好可能出现的各种情况,按照既定的方针进攻或者撤退,而不是等突发事件出现后胡乱做出决策;

第六,始终保持清醒的头脑,忽略一切噪音,避免任何不理智的操作。

Categories: Finance Tags: ,

Apache服务器访问过慢分析及解决

November 25th, 2009 CoCoWool No comments

起因:线上的一台服务器,最近总是出现 访问 很慢的情况发生,点击一个链接要2秒钟以上才能打开,按照我们对于访问人数的估计,服务器应该不至于响应这么慢,从而需要针对这个问题进行分析,来解决网站访问过慢。

分析:

1、首先,在页面访问变慢情况发生时,使用 top 命令查看了服务器的负载情况,发现负载并不高,初步估计不是程序的问题。
2、然后,查看了线程中的 httpd 的数量, ps -aux | grep httpd | wc -l 发现,线程数已经达到了 apache 设置的最大值。由此断定是网站访问人数过多造成了访问过慢。
3、为了验证,查看了连接数和当前的连接数,分别是
    netstat -ant | grep $ip:80 | wc -l
    netstat -ant | grep $ip:80 | grep EST | wc -l
    发现果然,连接数特别多,远远超过我们的估计值。
4、刚开始的时候,对于服务器的 MPM 配置方式不是特别的熟悉,认为修改服务器配置可以解决问题。主要的配置部分包括 prefork 模式 或者 work 模式的配置,下面是一些简单的介绍。

    prefork 模式:
    以 prefork 模式工作的 apache 的默认配置:
    <IfModule mpm_prefork_module>
        ServerLimit             2000   
        StartServers               5    #指定服务器启动时建立的子进程数量
        MinSpareServers            5    #指定空闲子进程的最小数量
        MaxSpareServers           10    #指定空闲子进程的最大数量
        MaxClients               150    #指定同一时间客户端最大接入请求的数量(单个进程并发线程数),任何超过该限制的请求都将进入等候队列,一旦一个连接被释放,队列中的请求将得到服务
        MaxRequestsPerChild        0    #指定每个子进程在其生存周期内允许伺服的最大请求数量,默认为10000,0表示子进程永远不结束
    </IfModule>
    prefork 控制进程在最初建立“StartServers”个子进程后,为了满足 MinSpareServers 设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
    MaxSpareServers 设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比 MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
    MaxClients是这些指令中最为重要的一个,设定的是 Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep httpd|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。在 apache2 中通过ServerLimit指令无须重编译Apache就可以加大MaxClients。
    虽然通过设置ServerLimit,我们可以把MaxClients加得很大,但是往往会适得其反,系统耗光所有内存。以一台服务器为例:内存2G,每个apache进程消耗大约0.5%(可通过ps aux来确认)的内存,也就是10M,这样,理论上这台服务器最多跑200个apache进程就会耗光系统所有内存,所以,设置MaxClients要慎重。
    worker 模式:
    以 worker 模式工作的 apache 的默认配置为:
    <IfModule mpm_worker_module>
        StartServers               2
        MaxClients               150
        MinSpareThreads           25
        MaxSpareThreads           75
        ThreadsPerChild           25
        MaxRequestsPerChild        0
    </IfModule>
    Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,
    MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
    MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。
    ThreadsPerChild是worker MPM中与性能相关最密切的指令。
    ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。
    Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。

    服务器的apache采用的是 prefork 的工作模式,对 MaxClients 进行了相应的调整,发现服务启动后很短时间,连接数就能够达到最大。
5、后来想到需要查看用户都是访问的那些页面,将配置中的 access_log 打开,发现85%以上的访问都是直接访问的资源文件,由此判定,用户可能使用了多线程的下载工具,或者这些资源遭受了盗链。
6、找到了问题所在,进行解决也就比较好办了。想到了两个方法:
    A、对单个IP进行连接的线程限制,不允许多线程连接资源。
        对于IP限制,我采用了 mod_limitipconn 这个模块。这个模块的好处是比较简单,缺点是不能够针对单独的文件夹或者文件进行设置,而且不支持虚拟主机。
        在 apache 中安装了这个模块后,在配置文件中添加如下几段就可以生效了:
            ExtendedStatus On
            < IfModule mod_limitipconn.c >
                < Location / >   # 所有虚拟主机的/目录
                    MaxConnPerIP 3     # 每IP只允许3个并发连接
                    NoIPLimit image/*  # 对图片不做IP限制
                < /Location >
            < Location /mp3 >  # 所有主机的/mp3目录
            MaxConnPerIP 1         # 每IP只允许一个连接请求   
            OnlyIPLimit audio/mpeg video    # 该限制只对视频和音频格式的文件
                < /Location >
            < /IfModule >
    B、添加URL重写,防止盗链。
        防止盗链,一个重要的方法就是判断请求的 refer,但是如果使用一些浏览器发出请求的时候将 refer 去掉,或者伪装,这个办法就无能为力了。但是貌似还有更高级的方法,还是可以实现这个功能。
        安装apache的 mod_rewrite 模块后,在apache配置文件中添加
        RewriteEngine On
        RewriteCond %{HTTP_REFERER} !^http://abc.com/.*$ [NC]
        RewriteCond %{HTTP_REFERER} !^http://abc.com$ [NC]
        RewriteCond %{HTTP_REFERER} !^http://www.abc.com/.*$ [NC]
        RewriteCond %{HTTP_REFERER} !^http://www.abc.com$ [NC]
        RewriteRule .*\.(gif|jpg|swf)$ http://www.abc.com/about/nolink.png [R,NC]
        这样盗链的请求会被重定向到一个错误页面,从而减少下载带给服务器的压力。

参考资料:
1、部署 Apache 的一些技巧。       

2、Apache Server 负载能力测试   
3、Apache AB                       
4、Apache的参数设置               
5、Ab的用法                       
6、Apache限制连接数和并发数       
7、Apache安装mod_rewrite模块       
8、Apache防盗链的简单实现           

Axure制作Tab切换效果

November 24th, 2009 CoCoWool No comments

axure 作为一款原型工具,能够帮助我们快速的设计原型,从而将产品人员的想法快速准确的传递给技术人员。

我们希望的最终效果如下图:

0004

Technorati 标签: ,,,

最简单的一种办法就是通过 Dynamic Panels 来实现。

首先创建一个空白的 Dynamic Panel,然后在 State 1 中开始绘制我们需要的样式。

0005 

下面就是最关键的一步,让这些元素都动起来。

0007 首先选中一个 Tab,然后单击右侧的 OnClick,在弹出的窗口中选中 Set panel state to state。选中对应的状态,确定就 OK 了。

然后,可以将设计好的元素全部 拷贝 到其他两个状态中,并且修改 Tab 的样式,来适应当前的状态。如下图:

0006 

 

这样就完成了 Tab 效果的切换,如果希望鼠标移到 Tab 上时能够有相应的响应效果,我们可以右键 –> Edit Button Shape –> Edit Roll Over Style 中进行样式的编辑。

其实 Axure 这款软件的易用性比较不错,上手很快,特别是如果掌握一些 DW 或者 MS Visual 系列工具使用经验的用户。

PS:虽然 axure 几乎能够做出各种各样的效果来,但我一直对于做出复杂效果的投入是否值得心存疑虑,原型作为一个中间过渡的产品,其价值就在于传递产品的设计和使用理念,而且在原型交接的过程中,一般都会有产品人员和技术人员面对面的沟通,这样一些很复杂的效果完全可以通过叙述来让技术人员明白,这样产品人员就可以节省时间来思考更多的关于产品本身的问题了。

参考资料:
1、Axure Sample

Categories: WebTech Tags: , , ,

Fedora 12 昨天正式发布

November 17th, 2009 CoCoWool No comments

Fedora 12 昨天正式发布了,而且最新的 Fedora 13 已经在平行的开发中了,感觉都快跟不上 Fedora 的脚步了。

来看一下新特性:

  • 性能优化:在 32 位平台上全部软件包针对 i686 架构重新编译,并对 Intel Atom 处理器进行性能调优。
  • NetworkManager :改善了对于宽带、蓝牙和 IPv6 的连接配置过程。配合 PolicyKit ,网络配置只需要点击鼠标即可轻松完成。
  • 下一代 Theroa 编码支持:Fedora 12 集成了最新的开源视频编解码器 Theora 1.1 版本(详情见本站此文)。
  • 更好的显卡支持:针对 Nvidia Nouveau 驱动和 AMD R600/700 系列的 KMS 支持,同时为 Intel 显卡引入 DisplayPort 支持。
  • 虚拟化支持:改善了 KVM 性能,并提供虚拟机磁盘镜像监控工具 guestfish。
  • 自动臭虫汇报系统和 SELinux:新的崩溃收集程序 abrt 只需要点击几下鼠标即可将遇到的软件或 SELinux 提交至 Bugzilla,方便开发者修复。
  • 新的 Dracut initrd 启动系统:并行、以事件为单位的 Dracut 系统进一步加快启动速度。
  • PackageKit 插件:当用户尝试运行一个包含在尚未安装的软件包中的命令时,PackageKit 可以自动提示安装相应软件包。
  • 按需蓝牙服务:蓝牙服务会根据需要自动启动和停止
  • Moblin 桌面环境:增加了 Moblin 桌面环境软件包组以及Fedora Moblin Spin 。
  • PulseAudio :增添了 UPnP 和 DLNA 支持,可以直接将音频流发送至 PS3 等设备。同时改善了热拔插和蓝牙设备支持。
  • 更加安全:降低了部分系统文件和进程的运行访问权限,避免使用 root 权限访问。同时为 SELinux 增添了沙箱支持。
  • Broadcom 固件:默认包含了 Open Broadcom 固件,对部分 Broadcom 无线网卡提供 out-of-the-box 支持。
  • 混合 Live 镜像:现在只需要使用 dd 即可创建光盘或者 USB Live 镜像,不过还是推荐使用 Livecd-tools 以获得诸如保留空间等功能。
  • 更好的摄像头支持:改善了部分摄像头的成象质量,尤其是很多廉价摄像头。
  • GNOME 2.28:使用 Gnote 替代了 Tomboy 成为默认便签,用 Empathy 替代了 Pidgin 成为默认即时通讯客户端。
  • GNOME-shell 预览:尽管 GNOME 3.0 延期了,但是依然可以在 Fedora 12 中提前体验下 GNOME Shell 的。
  • KDE 4.3:升级版的 Air 主题,可配置的快捷键支持,新的窗口管理器特效以及更好的红外线遥控支持。
  • 开发者:Eclipse Galileo, Perl 6, PHP 5.3, Netbeans 6.7.1
  • 管理员:GFS2 集群 Samba 管理
  • X.org 1.7.1:包含支持多指点设备支持的 XI2。

蛮期待的几点包括: Selinux sandbox,希望能够简化 Selinux 的操作;Gnome 桌面的优化,希望能够带来更好的桌面体验;

不太喜欢的一点是 内置了 php5.3,据说还不稳定,看来安装的时候要把勾选去掉了。

参考资料:

1、Fedora 12 Schedule

2、Feodra 12 正式发布

3、Fedora 12 Features

Categories: WebTech Tags: ,