场景描述:
有多个用户,每个用户,每20秒就访问xx.php,提交3个参数:a,b,c。a和b都是类似“234234.234323”的数字。c即是id,类似:“231”之类的。由于用户达到上千。而每个用户又是每20秒就要提交一次。所以,服务器受不了。经常资源超限,请诸位集思广议,讨论。非常感谢。
以下是xx.php的源码。<?php
$aaa=$_POST["aaa"];
$bbb=$_POST["bbb"];
$ccc=$_POST["ccc"];
$con = mysql_connect("localhost","userc","pwdpwd");
if (!$con)
{
die('Could not connect: ' . mysql_error());
echo '连接失败了';
}echo '成功连接了';
mysql_select_db("abc", $con);
function sid($str) {
preg_match_all('/[0-9.-]+/',$str,$result);
foreach($result[0] as $value)
{
$new_str.=$value;
}
return $new_str;
}
$aaa=sid($aaa);
$bbb=sid($bbb);
$ccc=sid($ccc);
mysql_query("INSERT INTO webtab (aaa,bbb,xxid)
VALUES ($aaa, $bbb,$ccc)");mysql_close($con);?>
php优化mysql服务器
有多个用户,每个用户,每20秒就访问xx.php,提交3个参数:a,b,c。a和b都是类似“234234.234323”的数字。c即是id,类似:“231”之类的。由于用户达到上千。而每个用户又是每20秒就要提交一次。所以,服务器受不了。经常资源超限,请诸位集思广议,讨论。非常感谢。
以下是xx.php的源码。<?php
$aaa=$_POST["aaa"];
$bbb=$_POST["bbb"];
$ccc=$_POST["ccc"];
$con = mysql_connect("localhost","userc","pwdpwd");
if (!$con)
{
die('Could not connect: ' . mysql_error());
echo '连接失败了';
}echo '成功连接了';
mysql_select_db("abc", $con);
function sid($str) {
preg_match_all('/[0-9.-]+/',$str,$result);
foreach($result[0] as $value)
{
$new_str.=$value;
}
return $new_str;
}
$aaa=sid($aaa);
$bbb=sid($bbb);
$ccc=sid($ccc);
mysql_query("INSERT INTO webtab (aaa,bbb,xxid)
VALUES ($aaa, $bbb,$ccc)");mysql_close($con);?>
php优化mysql服务器
这样会直到优化的作用吗?效果有多明显?我要如何才能看到这个优化的对比效果?有相关的工具吗?
可以考虑用php的共享内存 http://cn2.php.net/manual/zh/ref.shmop.php
在服务器上开一个php的进程,开辟一块共享内存,sleep一段时间后,将数据批量提交到mysql。
服务器收到请求时将数据写入到共享内存中立即退出
这应该是一个比较简单的方案了
搜索到了一个资料,看起来很复杂的样子,我用的是国外的空间,不是VPS,有些配置,好像没办法处理。
用的webhostingpad的空间,不是VPS,而且我是新手,没有找到办法看具体的监测信息。客服那边给出的说法是:tup.php这个文件引起的。我自己也知道我的所有文件中,这个是用户最经常访问的,源码和使用场景在最上面,已经贴出来了。现在我能想到的比较容易的解决办法就是将insert改为“INSERT DELAYED”,将改mysql_query为“mysql_unbuffered_query”即:
mysql_query("INSERT INTO webtab (aaa,bbb,xxid)
VALUES ($aaa, $bbb,$ccc)");
改为
mysql_unbuffered_query("INSERT DELAYED INTO wwwgps (Longitude,Latitude,servappid)
VALUES ($lo, $la,$aid)");
请诸位指点一下,这样改对优化有多大作用?有没有更好办法?比如,先将数据写到txt文件里,然后再每隔3分钟或1分钟将这个txt文件的内容一次性insert到数据库。我看其他资料上有写要将txt文件放到mysql的某目录下,但因为不是用的独立的服务器,我这边找不到mysql目录,只有publichtml这样的目录。
求指点,求建议啊,一般这种情况,要怎么处理?就算花钱升级,也得知道怎么花,划算啊。就是这个问题,其他的都指标占用很低,因此就上VPS,感觉很浪费啊。
Virtual Memory Usage 0 / 1,048,576 KB
Physical Memory Usage 34,012 / 1,048,576 KB
Entry Processes 0 / 25
I/O Usage 1,024 / 1,024 KB/s
磁盘空间使用情况 32.87 / 10,000 MB
带宽(本月) 2,698.54 / 100,000 MB===
从上面的数据,可以看出,实际上最费的资源是IO,其次就是CPU
带宽使用,其实很小的。求指点一下,IO超限,一般要怎么处理?我这站,基本上就是用户向里面写几十个字的数字。写的频率比较高。其他没什么费资源的了。连图片都是存在其他服务器上的。谢谢