自由软件社区

WindowsLiveWriterU3APP_AE5Bimage_4.png

自己动手制作U3P安装软件

使用PackageFactory for U3可以自己制作U3软件安装到自己的U3优盘上.

软件下载地址: http://www.eure.ca/

因为很多软件在设计的时候都会保存信息到Documents目录或者使用注册表项,所以从零开始制作优盘移动软件很难,幸好有Portable Apps项目,该项目已经把很多热门软件移动化,我利用这些程序制作自己的U3软件,就非常简单了. 首先下载需要的软件,安装,(路径可以选择安装在硬盘上,安装速度快)

本文末尾提供了我制作的二十几个u3p文件,您可以直接下载.

使用方法:

1,启动界面

2,点击右下角Advanced Mode (Wizard Mode我不会用,会出错)进入下图界面

更多 >

监控剩余内存,自动重启Apache和Mysql,使用Crontab和Daemon方法.

本文是专题:建站日记中的第8篇,共10篇

写下文本,源于我最近一次失败的尝试。我的VPS是限定最高内存用量的,上限为2G,如果内存用完了,就会出现Cannot allocate memory无法获取可用内存的故障,导致SSH无法远程登录,也网站性能也急剧下降。这个问题可以通过限制Apache和Mysql的配置来预防。可以做保守配置来杜绝这样的问题。但是由于我的配置比较乐观,可能在某些木马攻击或者劣质网站爬虫的骚扰下,前几天出现过一次内存不足问题,导致不得不请求服务商帮我重启了一下运行了60多天的服务器,让我非常伤心。所以我尝试了一下,可否通过建立脚本,监控运行状况来自动重启Apache和Mysql来释放内存,避免重启服务器,好让我的uptime千秋万代地积累下去?

最容易想到的就是采用Crontab来做了,下面是我第一次的尝试。脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#check free memory and decide how to maintain system.
#Albert Zhu 朱文昊 V0.1 http://zhuwenhao.com
MinFreeMem='100000' #only restart apache below this number
BadFreeMem='10000'  #retart apache and mysql below this number
CurrentMem=$(cat /proc/meminfo | grep -i MemFree | cut -d ':' -f2 | cut -d 'k' -f1)
CurrentMem=$(($CurrentMem+0))
#echo "CurrentMem="$CurrentMem
#echo "MinFreeMem="$MinFreeMem
#echo "BadFreeMem="$BadFreeMem
if [ $BadFreeMem -gt $CurrentMem ];
then
        echo `date "+%Y-%m-%d-%H-%M-%S"`
        echo "CurrentMem="$CurrentMem
        echo "restarted two service"
        service apache2 restart;
        service mysql   restart;
else
 
        if [ $MinFreeMem -gt $CurrentMem ];
        then
                echo `date "+%Y-%m-%d-%H-%M-%S"`
                echo "CurrentMem="$CurrentMem
                echo "restarted apache"
                service apache2 restart;
        fi
        echo `date "+%Y-%m-%d-%H-%M-%S"`
        echo "Free Memory is Good!"
fi

然后使用cron job来自动运行 crontab –e 后加入

1
* * * * * ./memmonitor.sh >> ./memmonitor.log

这样我的脚本会每分钟运行一下,怎么样?感觉很爽吧!于是压力测试,Apache在强大的并发连接下,很快内存飙升,2G内存立马没了。结果,当Cron job醒来后,内存不足,自己都运行不起来,崩溃~~~

分析一下,感觉是cron job每分钟运行一次,太慢!造成对内存感觉不灵敏,等到发现,已经晚了。cron设计最快也就是每分钟运行。于是改用死循环来做,也就是做成守护进程Daemon,对内存每秒钟检查一次,够好了吧?

继续压力测试,依然崩溃~~~~~

于是review脚本,发现 service apache2 restart这样的语句,本身需要较大的内存,而且貌似要等到apache的子进程把当前服务提供完后,才终止(这点我不是很确定,不要太相信)。如果在DDOS下,哪里有空等服务结束?应当直接kill掉。修改脚本为如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#check free memory and decide how to maintain system.
#Albert Zhu 朱文昊 V0.2 http://zhuwenhao.com
KillAllApacheSon ()
{
ListPIDtoKill=$(ps  -u wwwrun | grep httpd | cut -d ' ' -f1)
echo "List PID to Kill "$ListPIDtoKill
i=1
while [ true ];
do
        GetPIDtoKill=$(echo ${ListPIDtoKill} | cut -d ' ' -f${i})
        GetPIDtoKill=$(($GetPIDtoKill+0))
        if [ $GetPIDtoKill -gt 0 ];
        then
                kill $GetPIDtoKill
                echo "kill "$GetPIDtoKill
                i=$(($i+1))
        else
                break;
        fi
done
echo "Killed Apache Son Num: "$i
}
KillMysql ()
{
GetPIDtoKill=$(ps -u mysql | cut -d ' ' -f1)
GetPIDtoKill=$(($GetPIDtoKill+0))
if [ $GetPIDtoKill -gt 0 ];
then
        kill $GetPIDtoKill
        echo "kill mysql and PID is "$GetPIDtoKill
fi
}
CheckMem ()
{
MinFreeMem='100000' #only restart apache below this number
BadFreeMem='10000'  #retart apache and mysql below this number
CurrentMem=$(cat /proc/meminfo | grep -i MemFree | cut -d ':' -f2 | cut -d 'k' -f1)
CurrentMem=$(($CurrentMem+0))
#echo "CurrentMem="$CurrentMem
#echo "MinFreeMem="$MinFreeMem
#echo "BadFreeMem="$BadFreeMem
if [ $BadFreeMem -gt $CurrentMem ];
then
        echo `date "+%Y-%m-%d-%H-%M-%S"`
        echo "CurrentMem="$CurrentMem
        echo "restarted two service"
        KillAllApacheSon
        KillMysql
        service mysql   restart
else
 
        if [ $MinFreeMem -gt $CurrentMem ];
        then
                echo `date "+%Y-%m-%d-%H-%M-%S"`
                echo "CurrentMem="$CurrentMem
                echo "restarted apache"
                KillAllApacheSon
        fi
        echo `date "+%Y-%m-%d-%H-%M-%S"`
        echo "Free Memory is Good!"
fi
}
renice -15 $$ >> ./second.log
#echo $(nice)
while [ true ];
do
#       sleep 1
        usleep 100
        CheckMem>>./second.log
done

这次修改比较幸苦,感觉一个小脚本写到这份上,对我来说也算得上是高级bash编程了吧?呵呵。拉出来溜溜?惨不忍睹。依然无法实现预期功能。为什么?难道1秒钟也太漫长?

于是请出usleep,每隔100毫秒就检查内存一次。我的cpu 10%都用在这个脚本上了,结果怎么样?没用! 写到这里,我心灰意冷了,彻底放弃。亲爱的朋友,有谁能帮帮我呢?

我写出上面的文字来,除了期待高手来解救我之外,还有一个原因。仔细想想看,我的这些脚本不能在VPS上实现功能,但应该可以在独立服务器或者PC上工作,为什么呢?因为VPS一旦接近耗尽内存,那真的是一点memory都allocate不处理,所以脚本本身就无法继续执行.但是对于独立服务器或者PC, 都有swap机制. 在物理内存耗尽的情况下, 会拿硬盘来充数,虽然速度慢很多,但以上的两个版本的脚本,都有可能正常工作.所以如果你测试以上脚本可用,请告诉我,抚慰一下我受伤的心吧 :)

发布我的wordpress主题arclite的中文翻译

Arclite 2.02 作者为 digitalnature, 是一款有非常多的定制选项的wordpress主题, 我非常喜欢它的自适应屏幕的设计. 这几天我把它翻译了一下, 本来自己用. 不过既然是GPL许可证的主题, 我也就不私藏了, 把拙作贡献出来, 希望有用到的朋友多提意见.

这是第一次发布,版本号就叫 Ver0.1吧, 前台的单词都翻译完了, 后台配置界面很多没有翻译,如果有需要我会继续翻译的.

请在http://svn.zhuwenhao.com/arclite/ 下载po和mo文件,放到自己的themes/arclite/lang目录下就一切OK了.