<?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>出家如初，成佛有余&#187; mysql cpu 99%</title>
	<atom:link href="http://www.yeeach.com/tag/mysql-cpu-99/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yeeach.com</link>
	<description>专注电子商务领域，关注无线互联网，关注新媒体；Yeeach.com用于记录我技术生涯的点滴</description>
	<lastBuildDate>Sun, 25 Jul 2010 10:30:31 +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>mysql 数据库cpu 占用99.9%问题调优札记</title>
		<link>http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/</link>
		<comments>http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 09:18:33 +0000</pubDate>
		<dc:creator>chuanliang</dc:creator>
				<category><![CDATA[技术相关]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql cpu 99%]]></category>
		<category><![CDATA[swap]]></category>
		<category><![CDATA[too many open files]]></category>
		<category><![CDATA[ulimit]]></category>
		<category><![CDATA[性能调优]]></category>

		<guid isPermaLink="false">http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/</guid>
		<description><![CDATA[&#160; 新公司的系统一直很不稳定，店面销售人员经常报登不上系统或速度奇慢的情况，怀疑可能是代码存在数据库连接泄露及内存泄露现象，离春节只有几天时间，也来不急进行代码调优，只有从配置层面看有那些手段来采用，以便暂且缓解一下服务器压力，降低系统的故障率。为了第一时间能够知道服务器故障，基于nagios搭建了服务器监控程序，这样系统有故障时候，能够用短信方式通知系统故障，及时解决。 1、系统情况： &#160; 操作系统：Redhat AS4 &#160; 数据库：mysql 4.1.18 &#160; 应用服务器：JBoss 3.2.7 &#160; 服务器： 4 x3.00GHz的Intel Xeon CPU &#160; 数据库和应用服务器都部署在同一台服务器上。 &#160; 简单跟踪了一下，发现平常内存、io负载都不大，数据库连接数也不多。只是很奇怪的是mysql的cpu负载始终是99.9%,但整个系统的速度还行，开始怀疑是JVM、数据库参数、索引没有优化导致的，因此先着手对java虚拟机参数及数据库参数进行了调整。 2、java虚拟机调优 调整虚拟机的参数 &#160; JAVA_OPTS=&#8221;$JAVA_OPTS -Xms512m -Xmx1024m -server -XX:MaxPermSize=300m -XX:MaxNewSize=300m&#8221; 调整jboss的数据库连接池，修改最大连接数及连接回收时间 &#60;min-pool-size&#62;20&#60;/min-pool-size&#62; &#60;max-pool-size&#62;300&#60;/max-pool-size&#62; &#60;idle-timeout-minutes&#62;1&#60;/idle-timeout-minutes&#62; &#60;min-pool-size&#62;20&#60;/min-pool-size&#62; 3、数据库调优 对所有的表，优化及增加索引。 发现一个好用的mysql工具navicat，感觉比ems 好用，用这东西增加索引方便多了。 调整mysql参数 原来是基于my-medium.cnf 修改的参数，由于担心是大数据量查询sort区等不够及程序存在内存泄露问题，因此基于my-huge.cnf进行调整。 [client]port&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; = 3306socket&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; = /var/lib/mysql/mysql.sock [mysqld]port&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; = 3306socket&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; = /var/lib/mysql/mysql.sockskip-lockingkey_buffer = 256Mmax_allowed_packet [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; 新公司的系统一直很不稳定，店面销售人员经常报登不上系统或速度奇慢的情况，怀疑可能是代码存在数据库连接泄露及内存泄露现象，离春节只有几天时间，也来不急进行代码调优，只有从配置层面看有那些手段来采用，以便暂且缓解一下服务器压力，降低系统的故障率。为了第一时间能够知道服务器故障，基于nagios搭建了服务器监控程序，这样系统有故障时候，能够用短信方式通知系统故障，及时解决。</p>
<h3>1、系统情况：</h3>
<p>&nbsp; 操作系统：Redhat AS4</p>
<p>&nbsp; 数据库：mysql 4.1.18</p>
<p>&nbsp; 应用服务器：JBoss 3.2.7</p>
<p>&nbsp; 服务器： 4 x3.00GHz的Intel Xeon CPU</p>
<p>&nbsp; 数据库和应用服务器都部署在同一台服务器上。</p>
<p>&nbsp; 简单跟踪了一下，发现平常内存、io负载都不大，数据库连接数也不多。只是很奇怪的是mysql的cpu负载始终是99.9%,但整个系统的速度还行，开始怀疑是JVM、数据库参数、索引没有优化导致的，因此先着手对java虚拟机参数及数据库参数进行了调整。</p>
<h3>2、java虚拟机调优</h3>
<ul>
<li><strong>调整虚拟机的参数</strong></li>
</ul>
<p>&nbsp; JAVA_OPTS=&#8221;$JAVA_OPTS -Xms512m -Xmx1024m -server -XX:MaxPermSize=300m -XX:MaxNewSize=300m&#8221;</p>
<ul>
<li><strong>调整jboss的数据库连接池，修改最大连接数及连接回收时间</strong></li>
</ul>
<p>&lt;min-pool-size&gt;20&lt;/min-pool-size&gt;
<p>&lt;max-pool-size&gt;300&lt;/max-pool-size&gt;
<p>&lt;idle-timeout-minutes&gt;1&lt;/idle-timeout-minutes&gt;
<p>&lt;min-pool-size&gt;20&lt;/min-pool-size&gt;<br />
<h3>3、数据库调优</h3>
<ul>
<li><strong>对所有的表，优化及增加索引。</strong></li>
</ul>
<p>发现一个好用的mysql工具<a href="http://www.navicat.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.navicat.com/');">navicat</a>，感觉比ems 好用，用这东西增加索引方便多了。</p>
<ul>
<li><strong>调整mysql参数</strong></li>
</ul>
<p>原来是基于my-medium.cnf 修改的参数，由于担心是大数据量查询sort区等不够及程序存在内存泄露问题，因此基于my-huge.cnf进行调整。</p>
<p>[client]<br />port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3306<br />socket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /var/lib/mysql/mysql.sock <br />[mysqld]<br />port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3306<br />socket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /var/lib/mysql/mysql.sock<br />skip-locking<br />key_buffer = 256M<br />max_allowed_packet = 1M<br />table_cache = 256<br />sort_buffer_size = 2M<br />read_buffer_size = 2M<br />read_rnd_buffer_size = 2M<br />myisam_sort_buffer_size = 64M<br />thread_cache_size = 8<br />query_cache_size= 32M<br />thread_concurrency = 8<br />max_connections=300
<p>#skip-networking
<p>#log-bin
<p>server-id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 1
<p>[mysqldump]<br />quick<br />max_allowed_packet = 16M
<p>[mysql]<br />no-auto-rehash<br />#safe-updates
<p>[isamchk]<br />key_buffer = 128M<br />sort_buffer_size = 128M<br />read_buffer = 2M<br />write_buffer = 2M
<p>[myisamchk]<br />key_buffer = 128M<br />sort_buffer_size = 128M<br />read_buffer = 2M<br />write_buffer = 2M
<p>[mysqlhotcopy]<br />interactive-timeout
<p>调整后，支撑了3天左右，除了mysql的cpu占用始终是99%外，系统整体运行基本正常，忙于其他事情，没有继续跟踪。没想到大年初一接了一堆报警短信，执行查看了系统参数，发现系统竟然没有swap区，欣喜一阵，可能是这原因吧，于是临时建立swap区。</p>
<h2>4、增加swap区</h2>
<ul>
<li>
<p><strong>在/swap下生成1G的文件</strong></p>
</li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp; # mkdir /swap
<p>　　# dd if=/dev/zero of=/swap/swapfile bs=500M count=2
<ul>
<li><strong>创建为swap文件</strong></li>
</ul>
<p>　　#mkswap /swap
<ul>
<li>
<p><strong>让swap生效</strong></p>
</li>
</ul>
<p>　　#swapon /swap
<ul>
<li><strong>查看一下swap</strong></li>
</ul>
<p>　　#swapon -s
<ul>
<li><strong>把新增的swap文件加到fstab文件中让系统引导时自动启动</strong></li>
</ul>
<p>　　#vi /etc/fstab
<p>　　/swap/swapfile swap swap defaults 0 0
<p>&nbsp;&nbsp;&nbsp; 增加后，重启应用及服务，mysql的cpu占用还是持续性为99.9%，而且运行上一段时间还是出现无法登录的情况。远程登录到系统，发现内存、io、swap区占用都很正常，数据库连接数也很正常，而且在停止mysql和jboss后，直接重启jboss，不能正常启动成功，需要等上一会儿，怀疑是文件句柄及tcp连接尚未正常释放。联系以前遇到的情况，怀疑与操作系统允许的最大句柄数有关。</p>
<p>用ulimit -a|grep open 命令查看了结果为：</p>
<p>open files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (-n) 1024</p>
<p>用cat /proc/sys/fs/file-max查看结果为：</p>
<p>379816</p>
<p>由于数据库和jboss同时部署在同一台服务器上，在负荷较小的情况下用lsof -u root |wc -l查看root用户的句柄数仍然为700多，因此在负荷较高的情况下，用户的最大句柄数1024是有点小。</p>
<h3>5、修改操作系统句柄数</h3>
<h4>5.1、修改操作系统的最大限制数</h4>
<ul>
<li>修改 /etc/sysctl.conf</li>
</ul>
<p>&nbsp;&nbsp;&nbsp; 增加fs.file-max = 8061540 </p>
<ul>
<li>在/etc/pam.d/login 中添加&nbsp;&nbsp; </li>
</ul>
<p>&nbsp;&nbsp;&nbsp; session&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /lib/security/pam_limits.so </p>
<ul>
<li>在/etc/security/limits.conf 中添加 <br />root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nofile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1006154 </li>
</ul>
<p>&nbsp; 修改root用户的句柄数（包括hard和soft）限制为1006154</p>
<ul>
<li>修改 /etc/rc.local&nbsp;&nbsp; 添加 <br />echo 8061540 &gt; /proc/sys/fs/file-max</li>
</ul>
<p>&nbsp;</p>
<h4>5.2、修改用户最大限制数</h4>
<p>考虑到重启服务器的风险，先暂时修改一下启动jboss的root用户的/root/.bash_profile，增加如下内容：</p>
<p>ulimit -n 65535
<p>重启jboss和mysql。</p>
<p>连续观察了几天，发现cpu始终占用99.9%的情况解决掉了，继续观察中。</p>
<p>&nbsp;</p>
<h3>6、参考文档</h3>
<p><a title="http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html" href="http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html');">http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html</a></p>
<p><a title="http://kbase.redhat.com/faq/FAQ_80_1540.shtm" href="http://kbase.redhat.com/faq/FAQ_80_1540.shtm" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://kbase.redhat.com/faq/FAQ_80_1540.shtm');">http://kbase.redhat.com/faq/FAQ_80_1540.shtm</a></p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8341c1e4-c589-4166-a74c-a6bdf2a32913" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/ulimit" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://technorati.com/tags/ulimit');" rel="tag">ulimit</a>,<a href="http://technorati.com/tags/swap" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://technorati.com/tags/swap');" rel="tag">swap</a>,<a href="http://technorati.com/tags/linux" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://technorati.com/tags/linux');" rel="tag">linux</a>,<a href="http://technorati.com/tags/%e6%80%a7%e8%83%bd%e8%b0%83%e4%bc%98" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://technorati.com/tags/%e6%80%a7%e8%83%bd%e8%b0%83%e4%bc%98');" rel="tag">性能调优</a>,<a href="http://technorati.com/tags/mysql%20cpu%2099%" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://technorati.com/tags/mysql%20cpu%2099%');" rel="tag">mysql cpu 99%</a>,<a href="http://technorati.com/tags/too%20many%20open%20files" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://technorati.com/tags/too%20many%20open%20files');" rel="tag">too many open files</a></div>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; chuanliang for <a href="http://www.yeeach.com" >出家如初，成佛有余</a>, 2008. |
	  <a href="http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/" >Permalink</a> |
	  <a href="http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/#comments" >One comment</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/&amp;title=mysql 数据库cpu 占用99.9%问题调优札记" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://del.icio.us/post?url=http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/&amp;title=mysql 数据库cpu 占用99.9%问题调优札记');">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.technorati.com/search/http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/');" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://www.yeeach.com/category/%e6%8a%80%e6%9c%af-%e8%bd%af%e4%bb%b6/"  title="查看 技术相关 的全部文章" rel="category tag">技术相关</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.yeeach.com/2008/02/09/mysql-%e6%95%b0%e6%8d%ae%e5%ba%93cpu-%e5%8d%a0%e7%94%a8999%e9%97%ae%e9%a2%98%e8%b0%83%e4%bc%98%e6%9c%ad%e8%ae%b0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
