使用单例模式解决PHP耗尽服务器内存的问题

今天公司的项目出现了php超过了服务器内存限制的错误:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1792 bytes) in *****
后来发现Alert_Push_Main类中的main()是一个死循环观察者,一直在调用atom(),而atom()中的观察者类Alert_Push_Observer将一直被new即分配内存,我使用memory_get_usage()看了下内存的使用情况,每运行一次atom()会消耗1088bytes的内存,而这个main()是一个死循环,进程一直没有停止,导致这些内存没有释放掉,最终铸成了服务器内存耗尽的问题。
<?php
class Dzl_Alert_Push_Main
{
     public static function main()
     {
          while (true) {
               $weekday = date('w', strtotime(date('Y-m-d')));
               if (date('H:i:s') <= '15:00:00' 
               && date('H:i:s') >= '09:25:00'
               && $weekday != 0 && $weekday != 6) {
                    self::atom();
               } else {
                    //用于停掉观察者的死循环
                    break;
               }
          }
     }

     public static function atom()
     {
          $one = new Dzl_Alert_Push_Subject_Main();
          //下面这句是罪魁祸首!!!
          $observer = new Dzl_Alert_Push_Observer($one);
          $one->dealTrigger();
     }
}
解决方法:
这个时候我想到了单例模式,进程中只要一个Alert_Push_Observer对象就可以了:
<?php
class Dzl_Alert_Push_Main
{
     public static function main()
     {
          while (true) {
               $weekday = date('w', strtotime(date('Y-m-d')));
               if (date('H:i:s') <= '15:00:00' 
               && date('H:i:s') >= '09:25:00'
               && $weekday != 0 && $weekday != 6) {
                    self::atom();
               } else {
                    //用于停掉观察者的死循环
                    break;
               }
          }
     }

     public static function atom()
     {
          $one = new Dzl_Alert_Push_Subject_Main();
          //将下面这句改成了单例模式
          $observer = Dzl_Alert_Push_Observer::getInstance()->setSubject($one);
          $one->dealTrigger();
     }
}

遍历每个文件夹删除svn信息的方法(最最简单高效的方法)

在svn 1.7以前的版本,项目代码的每个目录都会有个.SVN的文件夹。到了1.7版之后,.SVN文件夹只有根目录才有。所以如果大家使用的是1.7以前的老版本的svn经常会遇到复制一个文件夹到一个新的的项目,而这个文件夹的有.SVN文件夹,包含了原来项目的版本信息,导致新的项目报出错误或者冲突。最好的办法就是删掉这些.SVN文件夹。但是如果文件夹的层级太多,有很多的子文件夹,子文件夹下还有子文件夹,这让我们手动去删除.SVN文件夹实在是太坑爹了!

这时候我们就会想到有没有什么工具可以帮助我们遍历删除指定文件夹下所有子文件夹的.SVN文件夹,废话不多说了,直接上方法:

1. 新建一个txt文档,将下面的代码拷进去:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN] 
@="Delete SVN Folders"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command] 
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

2. 然后保存后,文件名也不用管,直接将文件格式修改为.reg格式即可,这时候这个文档变成了一个windows注册表文件。

3. 双击执行该文件。

4. 右击你想要遍历删除.SVN文件夹的文件夹,会出现“Delete SVN Folders”:

Delete SVN Folders

点击即可遍历删除.SVN文件夹了!

loadrunner Flights中applet插件无法显示引发的问题

虽说多遇事助成长、
可老遇老遇也很烦躁、
loadrunner录制时,默认浏览器是打开IE
可录到一半老出现下图1

然后直接用chrome浏览器打开网页运行了下、
一切正常、
但刚打开时有提示安装下图2

然后就想着IE可能是JDK的原因、
去下了jdk-7-windows-i586 、安装了、还是不行、下图3中的这个applet插件处显示为红叉、

觉得放弃吧、换默认浏览器、
loadrunner中在Vuser下的Run-Time Settings里可以选择默认浏览器的类型、
一看只有这3种、如图45

那就下载个firefox吧、结果firefox里也applet插件也不能正常显示、
坑爹啊、
但事实上、在录制的时候就可以直接选择默认浏览器!!!、图6

那直接这边设置就OK了、
这个YX猜测说、这种就是软件新旧交替的时候没有搞好、旧版只能在图45中设置、连古董级老早死掉的netscape都还放着、
而新版已经可以在录制(图6)时直接选择、

后:后来还是想着要把IEfirefox给搞搞出来、
YXJDK7太新了、
那就去先把JDK7卸了吧、控制面板中JDK6JDK7都在、之前的JDK6也没删、
卸载JDK7、反而却是在更新、更新结束后、再次打开IEFIrefox、都OK了、

很多时候都是问题很莫名其妙的来、然后又很莫名其妙地消失、、

Intellectual Property(知识产权)

Intellectual property(IP) is a term referring to a number of distinct types of creations of the mind for which property rights are recognized and the corresponding fields of law.(知识产权是一个术语,指的是许多独特的类型的思想的创造物,这些创造物的财产权是公认的并且法律上是也是一致认同的。)

RTM(Requirements Traceability Matrix)需求跟踪矩阵

RTM(Requirements Traceability Matrix需求跟踪矩阵,用比较通俗的话来说,就是为了杜绝需求遗漏的表格。

An RTM identifies precisely what each requirement is. A requirements trace matrix is simply a spreadsheet. Let all the stakeholders agree on
documentation is very important. RTM helps keep the traceability between requirements and their sources.(RTM精确地确定每个需求是什么,需求跟踪矩阵仅仅是一个电子表格。让所有的利益相关者同意文档是非常重要的。RTM帮助保持需求和他们的来源的追踪能力)

Requirements Traceability Matrix is used to check to see if the current project requirements are being met, and to help in the creation of a Request for Proposal(提案申请), various deliverable documents, and project plan tasks. If requirements change, it is important to identify when and why they change.

Requirement Trace Matrix

 

17/March/2005

Number

Paragraph

Requirement

Type

Use Case

1

1

This database will store valuable information which the operators can then
use to better manage their B&B properties.

SW

2

1

This project will result in the development of a more cost efficient
online system for bed and breakfast operators and users.

SWC

 

3

4

The system shall be accessible and functional to four types of
users

D 57

 

参考资料:

百度百科

维基百科