<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fwolf's Blog &#187; optimize - Fwolf's Blog</title>
	<atom:link href="http://www.fwolf.com/blog/post/tag/optimize/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fwolf.com/blog</link>
	<description>随心·随意·随缘·努力～</description>
	<lastBuildDate>Sun, 29 Aug 2010 14:52:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>压缩网页图片</title>
		<link>http://www.fwolf.com/blog/post/447</link>
		<comments>http://www.fwolf.com/blog/post/447#comments</comments>
		<pubDate>Wed, 12 Aug 2009 04:54:34 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[compress]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[jpg]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[yslow]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=447</guid>
		<description><![CDATA[不压不知道，一压吓一跳，大部分图片几乎都能在近似无损的情况下压缩掉 65% 原始大小左右，如果指明有损压缩，比如 jpeg 的 85 %，还能更小。 Smush.it smushit 现在已经属于 Yslow 的一部分了，可以通过 firefox 插件使用，也能在线用，缺点就是你的图片必须能够从公网访问。 可以压缩各种图片，按照官方的解释，它会尝试各种工具和算法，找到最优的方式。因此，smushit 是一种很安全的压缩工具，几乎看不到差别，就是用起来麻烦些。 imagemagick 不同的图片格式有各自的特点，比如 gif 善于存储颜色较少的图片，也是动画图片的首选；png 善于存储能够矢量化的图片，jpg 则善于存储颜色、图片变化都比较多的图片。根据不同的图片特点，进行类型转换，有时能收到不错的效果。 图片 convert 之后，还可以利用其它工具进一步压缩，不过效果不大了。 另附一个转换图片类型之后，批量替换模板中调用文件名的脚本： grep logo.gif * -R &#124; awk '{print $1}' &#124; sed 's/://' &#124; xargs -I '{}' sed -i 's/logo.gif/logo.jpg/' '{}' jpegoptim 这是今天刚发现的好东西，ubuntu 源中有，主要可以用它去除 jpg 图片文件当中的 comment exif IPTC 等无用标记，我测试的情况压缩率比 smushit [...]]]></description>
			<content:encoded><![CDATA[<p>不压不知道，一压吓一跳，大部分图片几乎都能在近似无损的情况下压缩掉 65% 原始大小左右，如果指明有损压缩，比如 jpeg 的 85 %，还能更小。</p>

<h3>Smush.it</h3>

<p><a href="http://developer.yahoo.com/yslow/smushit/" title="Smush.it&trade;">smushit</a> 现在已经属于 <a href="http://developer.yahoo.com/yslow/">Yslow</a> 的一部分了，可以通过 firefox 插件使用，也能在线用，缺点就是你的图片必须能够从公网访问。</p>

<p>可以压缩各种图片，按照<a href="http://developer.yahoo.com/yslow/smushit/faq.html#faq_crushtool">官方的解释</a>，它会尝试各种工具和算法，找到最优的方式。因此，<a href="http://developer.yahoo.com/yslow/smushit/" title="Smush.it&trade;">smushit</a> 是一种很安全的压缩工具，几乎看不到差别，就是用起来麻烦些。</p>

<h3>imagemagick</h3>

<p>不同的图片格式有各自的特点，比如 gif 善于存储颜色较少的图片，也是动画图片的首选；png 善于存储能够矢量化的图片，jpg 则善于存储颜色、图片变化都比较多的图片。根据不同的图片特点，进行类型转换，有时能收到不错的效果。</p>

<p>图片 convert 之后，还可以利用其它工具进一步压缩，不过效果不大了。</p>

<p>另附一个转换图片类型之后，批量替换模板中调用文件名的脚本：</p>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">grep</span> logo.gif <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">-R</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $1}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/://'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #660033;">-I</span> <span style="color: #ff0000;">'{}'</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">'s/logo.gif/logo.jpg/'</span> <span style="color: #ff0000;">'{}'</span></pre></div></div>


<h3>jpegoptim</h3>

<p>这是今天刚发现的好东西，ubuntu 源中有，主要可以用它去除 jpg 图片文件当中的 comment exif IPTC 等无用标记，我测试的情况压缩率比 <a href="http://developer.yahoo.com/yslow/smushit/" title="Smush.it&trade;">smushit</a> 略低一点点。由于能够通过命令行使用，所以易用性更强。</p>

<p>一般我喜欢用 <code>--strip-all</code> 参数去除所有无用内容，实际压缩之前可以用 <code>-n</code> 参数预测一下压缩率（默认直接压缩覆盖源文件了），<code>24bit Adobe</code> 类型的图片基本上都能够压缩掉 65% 原始大小，碰到 <code>24bit JFIF</code> 这种类型的图片一般压不动，但带上有损压缩参数比如 <code>-m85</code>之后，依然能够达到较理想的压缩率，并且图片损失效果不明显。</p>

<p>遇到无法压缩的图片、压缩后体积反而增大的图片会自动跳过，很贴心。</p>

<p>基本上，有了上面三种方式，就能够处理大部分网页图片了。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/compress" title="compress" rel="tag">compress</a>, <a href="http://www.fwolf.com/blog/post/tag/convert" title="convert" rel="tag">convert</a>, <a href="http://www.fwolf.com/blog/post/tag/gif" title="gif" rel="tag">gif</a>, <a href="http://www.fwolf.com/blog/post/tag/image" title="image" rel="tag">image</a>, <a href="http://www.fwolf.com/blog/post/tag/jpg" title="jpg" rel="tag">jpg</a>, <a href="http://www.fwolf.com/blog/post/tag/optimize" title="optimize" rel="tag">optimize</a>, <a href="http://www.fwolf.com/blog/post/tag/png" title="png" rel="tag">png</a>, <a href="http://www.fwolf.com/blog/post/tag/yslow" title="yslow" rel="tag">yslow</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/430" title="转换静态图像为视频 (2009-01-19)">转换静态图像为视频</a> (1)</li>
	<li><a href="http://www.fwolf.com/blog/post/277" title="使用mencoder转换佳能数码相机录像文件的最佳参数 (2007-01-01)">使用mencoder转换佳能数码相机录像文件的最佳参数</a> (11)</li>
	<li><a href="http://www.fwolf.com/blog/post/383" title="[MediaTemple]虚拟主机内存优化的一点心得 (2008-02-19)">[MediaTemple]虚拟主机内存优化的一点心得</a> (2)</li>
	<li><a href="http://www.fwolf.com/blog/post/53" title="PNG图片压缩工具 (2005-06-19)">PNG图片压缩工具</a> (7)</li>
	<li><a href="http://www.fwolf.com/blog/post/89" title="IE 6.0仍然无法显示PNG图片文件的原貌？ (2005-11-14)">IE 6.0仍然无法显示PNG图片文件的原貌？</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/447/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[MediaTemple]虚拟主机内存优化的一点心得</title>
		<link>http://www.fwolf.com/blog/post/383</link>
		<comments>http://www.fwolf.com/blog/post/383#comments</comments>
		<pubDate>Mon, 18 Feb 2008 17:41:13 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Hosted]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[MediaTemple]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[named]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[ram]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/post/383</guid>
		<description><![CDATA[今天下午好像有人对服务器ddos，或者大量灌spam（我不敢说每个人都安装了anti spam插件，即使安装了，“应对”spammer也要消耗服务器资源），http服务器耗尽服务器资源后挂掉，一会儿被watchdog重启，过不了多一会儿再次挂掉。。。以前也尝试过优化apache，不过今天似乎终于摸到了一点儿窍门。 我们合租的MediaTemple服务器cpu负载不高，内存相对紧张： top - 23:39:45 up 16 days, 7:24, 2 users, load average: 0.58, 0.50, 0.47 Tasks: 46 total, 1 running, 45 sleeping, 0 stopped, 0 zombie Cpu(s): 9.9% us, 2.5% sy, 0.0% ni, 87.6% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 689496k total, 550892k used, 138604k free, 0k buffers 所以优化主要针对如何节约内存。主机内存实际是256M，可能是多核的缘故，总显示接近700M内存，不过对应的各个进程占用的内存也相应增加了。MediaTemple的KB中有一篇(dv) HOWTO: Performance [...]]]></description>
			<content:encoded><![CDATA[<p>今天下午好像有人对服务器ddos，或者大量灌spam（我不敢说每个人都安装了anti spam插件，即使安装了，“应对”spammer也要消耗服务器资源），http服务器耗尽服务器资源后挂掉，一会儿被watchdog重启，过不了多一会儿再次挂掉。。。以前也尝试过优化apache，不过今天似乎终于摸到了一点儿窍门。</p>

<p>我们合租的MediaTemple服务器cpu负载不高，内存相对紧张：</p>

<pre><code>top - 23:39:45 up 16 days,  7:24,  2 users,  load average: 0.58, 0.50, 0.47
Tasks:  46 total,   1 running,  45 sleeping,   0 stopped,   0 zombie
Cpu(s):  9.9% us,  2.5% sy,  0.0% ni, 87.6% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    689496k total,   550892k used,   138604k free,        0k buffers
</code></pre>

<p>所以优化主要针对如何节约内存。主机内存实际是256M，可能是多核的缘故，总显示接近700M内存，不过对应的各个进程占用的内存也相应增加了。MediaTemple的KB中有一篇<a href="http://kb.mediatemple.net/article.php?id=771">(dv) HOWTO: Performance tuning (Optimization)</a>，先按照这个来优化一下，主要分为三个部分。</p>

<h4>优化Apache(httpd)</h4>

<p>缩短超时时限：</p>

<pre><code>#Timeout 120
Timeout 30
</code></pre>

<p>调整prefork参数，我调整的结果是：</p>

<pre><code>&lt;IfModule prefork.c&gt;
#1/1/3
StartServers       1
MinSpareServers    1
MaxSpareServers    3
# 50 ?
ServerLimit       20
MaxClients        20
MaxRequestsPerChild  2000
&lt;/IfModule&gt;
</code></pre>

<p>StartServers是开始的httpd进程数，Min和Max SpareServers是最少和最多空闲进程数，ServerLimit和MaxClients是总进程数限制，这两个参数一般来说是相同的，httpd所消耗的总内存数就和这个相关（实际进程数还会多两个，应该是负责管理子进程的“父进程”），内存不够可以把这两个数值进一步缩小，但这也同时对应着httpd同时处理的并发数。MaxRequestsPerChild是每个进程在处理多少个任务后自杀，根据需要和相关设置还会再启动新的子进程，这种机制有利于释放一些内存碎片。</p>

<p>MaxClients不够会在log产生错误信息，可以用下面的命令查询：</p>

<pre><code>grep -i maxclient /var/log/httpd/error_log
</code></pre>

<p>可以根据情况再调整MaxClients的值，但如果内存就是短缺，又能有什么办法呢？</p>

<h4>优化Mysql</h4>

<p>设置缓存，在my.cnf的<code>[mysqld]</code>段中增加：</p>

<pre><code># Cache
query-cache-type = 1
query-cache-size = 16M
</code></pre>

<p>虽然会多占用一些内存，但能加快处理的速度，尽快把等待队列“消化”掉，还是有利于加速的。在mysql中可以查询cache使用情况：</p>

<pre><code>mysql&gt; show status like 'Qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 12       |
| Qcache_free_memory      | 13028408 |
| Qcache_hits             | 35117    |
| Qcache_inserts          | 751      |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 56       |
| Qcache_queries_in_cache | 377      |
| Qcache_total_blocks     | 872      |
+-------------------------+----------+
8 rows in set (0.00 sec)
...... some times late ......
mysql&gt; show status like 'Qcache%';
+-------------------------+---------+
| Variable_name           | Value   |
+-------------------------+---------+
| Qcache_free_blocks      | 88      |
| Qcache_free_memory      | 8837920 |
| Qcache_hits             | 164437  |
| Qcache_inserts          | 3572    |
| Qcache_lowmem_prunes    | 0       |
| Qcache_not_cached       | 432     |
| Qcache_queries_in_cache | 1177    |
| Qcache_total_blocks     | 2579    |
+-------------------------+---------+
8 rows in set (0.00 sec)
</code></pre>

<p>调整query-cache-size的值让Qcache_lowmem_prunes保持在0最好，设置太大了也是浪费内存。</p>

<h4>关闭不需要的服务</h4>

<p>比如named，域名解析使用域名注册商提供的就足够了，关闭spamassassin，邮件服务仅限于对外发送邮件，不接收：</p>

<pre><code>chmod 644 /etc/init.d/psa-spamassassin
</code></pre>

<p>watchdog暂时不建议关闭，人不在的时候它会自动重启服务，还是有一点用处的。</p>

<h4>其它优化设置</h4>

<p>从其它地方还看到可以开启KeepAlive：</p>

<pre><code>KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
</code></pre>

<p>这样每个连接可以发送100次请求，超时时间为15秒。如果KeepAliveTimeout减少一些，MaxKeepAliveRequests还可以设置得更大一点。</p>

<p>还可以启用apache的压缩输出功能：</p>

<pre><code>&lt;ifmodule mod_deflate.c&gt;
#   DeflateCompressionLevel 2
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/x-javascript text/css
&lt;/ifmodule&gt;
</code></pre>

<p>简单观察一下，开启deflate之后，服务器cpu idle值大概会减少15~20%，国外主机数据传输本身就慢，希望这些花销值得。</p>

<pre><code>top - 01:39:03 up 16 days,  9:23,  3 users,  load average: 2.16, 2.09, 1.97
Tasks:  48 total,   1 running,  47 sleeping,   0 stopped,   0 zombie
Cpu(s): 24.1% us,  8.4% sy,  0.0% ni, 67.6% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    689496k total,   431452k used,   258044k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached
</code></pre>

<h4>结果</h4>

<p>现在看一下结果，<code>ps -U apache u</code>能看到一共有20个apache进程在运行，占用内存总量为：</p>

<pre><code>root@fwolf:~# ps -U apache u|awk '{S+=$6} END {print S}'
385396
</code></pre>

<p>随着服务运行，内存使用量还会增加（所以MaxRequestsPerChild别设太大，定期重启一些进程）。再看看那个疑似对我ddos的家伙：</p>

<pre><code>root@fwolf:~# netstat -nap|grep :80|wc -l
513
root@fwolf:~# netstat -nap|grep TIME_WAIT|wc -l
9
root@fwolf:~# netstat -nap|grep 124.115|wc -l
464
root@fwolf:~# netstat -nap|grep 124.115.0|wc -l
376
root@fwolf:~# netstat -nap|grep 124.115.4|wc -l
93
</code></pre>

<p>此时服务器访问稍慢，有时会超时，但起以前动不动内存不足，httpd挂掉要好一些了。查了一下，这个IP地址属于“陕西省西安市 电信”，地址总换，但基本都在上面两个网段之内。</p>

<p>再后来，访问量降下来之后，系统就恢复正常了，优化应该还是对服务器速度有一些作用的。</p>

<pre><code>root@fwolf:~# netstat -nap|grep :80|wc -l; netstat -nap|grep TIME_WAIT|wc -l
69
47
</code></pre>

<p>最后贴两张后台流量图表，异常大概开始于18号下午16点，导致18号流量剧增。服务器时间是西8区，所以小时图表中的0点就是16点。按天的那个图表不知为什么出不来，不过注意18号的流量只是前9个小时的就是了。</p>

<p><a href="http://img181.imageshack.us/my.php?image=plesk8211203355872619sr4.png" target="_blank"><img src="http://img181.imageshack.us/img181/8158/plesk8211203355872619sr4.th.png" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a></p>

<p><a href="http://img232.imageshack.us/my.php?image=plesk8211203355495991zh3.png" target="_blank"><img src="http://img232.imageshack.us/img232/8916/plesk8211203355495991zh3.th.png" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a></p>

<p>另外，合租的兄弟们，<a href="http://www.mediatemple.net/webhosting/dv/details.htm#php5">现在新的dv主机默认是PHP 5.2了</a>，咱们啥时候升级呢？</p>

<h4>参考</h4>

<ul>
<li><a href="http://jed.dzhope.com/read.php/272.htm">再议apache优化</a></li>
<li><a href="http://hi.baidu.com/swgweb/blog/item/dba900e94cbe9b3cb90e2d18.html">APACHE优化之apache的内存使用</a></li>
<li><a href="http://tech.idv2.com/2007/08/09/about-apache-perf-tuning/">谈谈Apache的优化</a></li>
</ul>

<h4>Update @ 2008-01-19</h4>

<p>看来我的担心是多余的，mod_deflate启用之后并没有耗费太多系统资源，访问量恢复正常之后，cpu load也恢复了正常：</p>

<pre><code>top - 16:15:45 up 17 days, 0 min,  1 user,  load average: 0.04, 0.05, 0.07
Tasks:  51 total,   1 running,  50 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.8% us,  0.7% sy,  0.0% ni, 95.9% id,  1.7% wa,  0.0% hi,  0.0% si
Mem:    689496k total,   510200k used,   179296k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached
</code></pre>

<p>好像启用了KeepAlive后httpd进程轮换得特别快，不像以前半天不重生一个。现在可以清楚的看到18号全天的流量图标了，再补两张图：</p>

<p><a href="http://img341.imageshack.us/my.php?image=plesk8211203409271331vr2.png" target="_blank"><img src="http://img341.imageshack.us/img341/3262/plesk8211203409271331vr2.th.png" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a></p>

<p><a href="http://img401.imageshack.us/my.php?image=plesk8211203409395882kx1.png" target="_blank"><img src="http://img401.imageshack.us/img401/2183/plesk8211203409395882kx1.th.png" border="0" alt="Free Image Hosting at www.ImageShack.us" /></a></p>

<p>按每小时400M流量计算，每秒流量为110K，不知道算是个什么样的水平。</p>

<h4>Update @ 2008-01-19</h4>

<p>关闭named服务后，jail环境的ssh用户使用wget下载文件会遇到<code>Name or service not known</code>错误，把<code>/etc/resolv.conf</code>也配置到chroot中就可以了。有趣的是，如果named服务启动着就不存在这个问题。</p>

<p>顺便还把denyhosts装上了，daemon模式运行，占内存不多，攻击者还不少呢，值得。参考：<a href="http://www.sofee.cn/blog/2006/10/22/51/">使用DenyHosts阻止SSH暴力破解</a></p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/apache" title="Apache" rel="tag">Apache</a>, <a href="http://www.fwolf.com/blog/post/tag/ddos" title="ddos" rel="tag">ddos</a>, <a href="http://www.fwolf.com/blog/post/tag/hosted" title="Hosted" rel="tag">Hosted</a>, <a href="http://www.fwolf.com/blog/post/tag/httpd" title="httpd" rel="tag">httpd</a>, <a href="http://www.fwolf.com/blog/post/tag/mediatemple" title="MediaTemple" rel="tag">MediaTemple</a>, <a href="http://www.fwolf.com/blog/post/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.fwolf.com/blog/post/tag/named" title="named" rel="tag">named</a>, <a href="http://www.fwolf.com/blog/post/tag/optimize" title="optimize" rel="tag">optimize</a>, <a href="http://www.fwolf.com/blog/post/tag/ram" title="ram" rel="tag">ram</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/411" title="由一个错误学到的一些php安全配置问题 (2008-07-13)">由一个错误学到的一些php安全配置问题</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/407" title="生成用于web服务器的openssl证书 (2008-06-25)">生成用于web服务器的openssl证书</a> (1)</li>
	<li><a href="http://www.fwolf.com/blog/post/347" title="升级MT dv 3.0主机到php5 (2007-08-09)">升级MT dv 3.0主机到php5</a> (9)</li>
	<li><a href="http://www.fwolf.com/blog/post/343" title="MT主机控制面板Plesk合租用户使用指南 (2007-07-27)">MT主机控制面板Plesk合租用户使用指南</a> (12)</li>
	<li><a href="http://www.fwolf.com/blog/post/406" title="麻烦一连串儿 (2008-06-23)">麻烦一连串儿</a> (8)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/383/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
