论坛风格切换切换到宽版
  • 18032阅读
  • 9回复

杀mysql sleep 进程的脚本{摘抄的] [复制链接]

上一主题 下一主题
离线骨头
 

发帖
27172
金钱
10048
威望
136198
只看楼主 倒序阅读 使用道具 楼主  发表于: 2007-09-03
关键词: mysqlphpwind
#It is used to kill processlist of mysql sleep~~~
#!/bin/sh
while :

do
        n=`/opt/mysql/bin/mysqladmin processlist|grep -i sleep |wc -l`
        date=`date +%Y%m%d\[%H:%M:%S]`
        echo $n
#      id=`/opt/mysql/bin/mysqladmin processlist |grep Sleep |awk '{if ($12  gt; 100) {print $2}}'`
#      echo  quot;$date : $n quot;  gt; gt; /tmp/sleep.log
#      if [ id !=  quot; quot; ]
#      then
#              for j in $id
#              do
#              /opt/mysql/bin/mysqladmin kill $j
#              echo  quot;$date : sleep is to long  quot;  gt; gt; /tmp/sleep.log
#      fi
#
        if [  quot;$n quot; -gt 60 ]
        then

                for i in `/opt/mysql/bin/mysqladmin processlist|grep -i sleep |awk '{print $2}'`
                do
                        /opt/mysql/bin/mysqladmin kill $i
                done
                echo  quot;sleep is too many i killed it  quot;  gt; gt; /tmp/sleep.log
                echo  quot;$date : $n quot;  gt; gt; /tmp/sleep.log
        fi             
        sleep 1
done

=============2008-7-16-=============

[pre]关于Apache与MYsql的持续连接太多的问题



  关于Apache::DBI与MYsql的持续连接太多的问题大家已经研
究了一段时间了。

我经过这几天研究发现mod_perl提供的持续连接并不智能(也许是我还没有找到更好的解决方案),如果脚本中的参数和初始化的参数不一样,在内存中会出现两个句柄。

Apache::DBI- gt;connect_on_init(\\ quot;DBI:mysql:mysql:localhost\\ quot;,\\ quot;root\\ quot;,\\ quot;root\\ quot;,
{
PrintError = gt; 1,
RaiseError = gt; 0,
AutoCommit = gt; 1,
});



my $dbh = DBI- gt;connect(\\ quot;DBI:mysql:database=localhost\\ quot;,\\ quot;root\\ quot;,\\ quot;root\\ quot;,{
PrintError = gt; 1,
RaiseError = gt; 0,
AutoCommit = gt; 1,
});

以上两个语句实现同一个连接,返回同一种结果,但是他们的概念完全不一样。

经过统一参数,写作方法,和格式。测试后,发现process不再无故增长,达到预
期效果。

事故原因分析:对于一个数据库,Apache::DBI建立一个持续连接, 如果在
startup.pl文件中初始化的时候采用一种书写格式,参数,而脚本中
DBI- gt;connect又采用不同的连接方式和格式,因此假如一个以上的句柄实现同一个
目的(连接同一个数据库)的话,最后一个连接进入时,它会企图查找最后一个相
匹配的句柄(Handler),换句话说就是找一个参数,格式都一样的句柄。这里问题
就出来了,内存中存在两个实现同一目的的句柄(但是格式或参数不一样),这个
连接无法识别应该使用哪一个,所以被迫建立一个新的句柄,而导致原先的句柄继
续Sleep(我管它叫做僵尸句柄)。

解决方案:其实解决方法非常简单,因为昨天我也在其他操作系统上(RedHat 7)装
了Apache+Mod_perl+Mysql,仍然出现相同的问题。根据内存分析与同伴们的测
试。得出一个结论,当内存中连接同一数据库的句柄数在一个以上的时候,
process会无故增加,当句柄为一个的时候,process不会增长,而采用原有内存中
的句柄,这个就是我们想要的。为实现这一目的,我们需要统一初始化和connect
的格式,参数和相关信息

关于并发处理:测试发现,句柄初始化在process中建立的5个连接完全可以人工控
制。修改MinSpareServers(最小空闲服务器)和MaxSpareServers(最大空闲服务器)
的数量。该数量放的越大,服务器的并发处理能力就越高。但是我们要付出的是宝
贵的内存为代价,根据网站的点击次数合理调节该数量是最为明智的选择。如果服
务器遇到大量并发请求,系统会自动克隆相应的句柄以适应并发的数量。当请求完
毕后,系统将自动断开克隆的句柄以释放沉余的内存。大家看下面的例子,我采用
ab(ApacheBench)这个工具对服务器请求5000次,并发数为100,观看mysql的句柄
线程数,最高峰值达到50,当请求完毕后,释放沉余的句柄空闲内存,这时线程数
量又恢复到5个(我的Apache Config File中 MaxSpareServers 设置为5)。

D:\\\\ gt;ab -n 5000 -c 100 http://10.4.1.32/mod_perl/dbi.cgi
This is ApacheBench, Version 1.3e  lt;$Revision: 1.69 $ gt; apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.
net/
Copyright (c) 1998-2001 The Apache Software Foundation,
http://www.apache.org/

Benchmarking 10.4.1.32 (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Finished 5000 requests
Server Software: Apache/1.3.20
Server Hostname: 10.4.1.32
Server Port: 80

Document Path: /mod_perl/dbi.cgi
Document Length: 99 bytes

Concurrency Level: 100
Time taken for tests: qd.qd seconds
Complete requests: 5000
Failed requests: 0
Write errors: 0
Total transferred: 1220000 bytes
HTML transferred: 495000 bytes
Requests per second: 132.37 [#/sec] (mean)
Time per request: 755.48 [ms] (mean)
Time per request: 7.55 [ms] (mean, across all concurent requests)
Transfer rate: 32.30 [Kbytes/sec] received

Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 72.2 0 2964
Processing: 80 743 3199.6 260 37263
Waiting: 10 725 3198.1 240 37253
Total: 80 746 3200.0 260 37263

Percentage of the requests served within a certain time (ms)
50% 260
66% 320
75% 420
80% 490
90% 741
95% 3054
98% 4606
99% 4626
100% 37263 (last request)[/pre]
2条评分
﹎sκyˊ☆ 威望 +3 - 2007-09-03
﹎sκyˊ☆ 威望 +3 - 2007-09-03

有事情新浪微博@某骨头  ,OK~  ,不回答为什么不开发塞班版本等问题!
离线man20

发帖
9506
金钱
1202
威望
13061
只看该作者 沙发  发表于: 2007-09-03
久违的技术帖子。
2条评分
骨骨 威望 +8 捧场有奖 2007-09-03
骨骨 威望 +8 捧场有奖 2007-09-03
离线heymi

发帖
29038
金钱
5826103
威望
3000011
只看该作者 板凳  发表于: 2007-09-03
不错
离线pcb123

发帖
411
金钱
3
威望
-41
只看该作者 3楼 发表于: 2007-09-09
期待已久,谢意!
发帖
2635
金钱
459
威望
8
只看该作者 4楼 发表于: 2007-10-26
用户被禁言,该主题自动屏蔽!
离线MGarfield

发帖
577
金钱
737
威望
217
只看该作者 5楼 发表于: 2008-07-16
不错学习了~
发帖
104
金钱
277
威望
0
只看该作者 6楼 发表于: 2008-07-19
好好,顶顶
离线rzhq
发帖
16
金钱
191
威望
0
只看该作者 7楼 发表于: 2008-07-22
恩支持你 骨头 不吃肉只啃骨头
离线117666
发帖
176
金钱
338
威望
-17
只看该作者 8楼 发表于: 2008-07-24
我不吃肉只啃骨头
离线wellpiez
发帖
5
金钱
180
威望
0
只看该作者 9楼 发表于: 2008-07-24
租用服务器的可以找我,我们全国大大小小有30几个机房可以选择,绝对有让你满意的,QQ 908267931 张先生  

我们在河南就一直有双线机房在合作,南京也有,朋友可以加我谈谈  

厦门维派科技  
专业提供低价空间,双线空间,vps服务器,带宽租用, 百M独享,G口带宽  
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿纯表情、纯引用!
 
上一个 下一个