在我的Web应用程序中,我使用PHP脚本呈现页面,然后从它们生成静态HTML文件.静态HTML将提供给用户以加快性能.HTML文件最终变得陈旧,需要删除.
我正在讨论两种编写驱逐脚本的方法.
第一个是使用单个find命令,比如
find /var/www/cache -type f -mmin +10 -exec rm \{} \;
Run Code Online (Sandbox Code Playgroud)
第二种形式是通过xargs管道,类似于
find /var/www/cache -type f -mmin +10 -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)
第一个表单调用rm
它找到的每个文件,而第二个表单只将所有文件名发送到一个rm
(但文件列表可能很长).
哪种形式会更快?
在我的例子中,缓存目录在几个Web服务器之间共享,所以这一切都是通过NFS完成的,如果这个问题很重要的话.
我问的是一个运行轻型前端的Web服务器(在我的例子中是nginx),通过fastcgi访问PHP进程.
我试图找到一种方法来有条不紊地计算应该在机器中运行多少PHP cgi进程.
考虑它的一种方法是计算出一个进程的平均内存占用量,并在可用RAM的限制范围内尽可能多地运行.但是,这并没有将CPU使用率带入问题.
由于CPU是我应用程序中的真正瓶颈(使用DB和memcache,但不是瓶颈),我认为php进程的基数应该是可用的CPU数量.
例如 - 在8核机器中,基数为8.假设某些进程等待数据库或网络,我认为没有任何理由共同运行超过20个PHP进程.
这种思维方式有意义吗?你如何计算运行的进程数?
是否有一个漂亮而优雅的方式(使用boost :: algorithm :: replace may?)来替换字符串中所有出现的字符 - 除非前面加一个反斜杠?
以便
std::string s1("hello 'world'");
my_replace(s1, "'", "''"); // s1 becomes "hello ''world''"
std::string s2("hello \\'world'"); // note: only a single backslash in the string
my_replace(s2, "'", "''"); // s2 becomes "hello \\'world''"
Run Code Online (Sandbox Code Playgroud)
使用boost :: regex,可以使用以下命令完成:
std::string my_replace (std::string s, std::string search, std::string format) {
boost::regex e("([^\\\\])" + search);
return boost::regex_replace(s, e, "\\1" + format);
}
Run Code Online (Sandbox Code Playgroud)
但由于性能原因,我不想使用boost :: regex.boost :: algorithm :: replace看起来很合适,但我无法确切知道如何.