- 浏览: 235371 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hnraysir:
必须登录评论下,谢谢。by elesos.com
分库和分表 -
化蝶自在飞:
命运使然.前生来世都注定了的.
贫穷是罪恶之源 -
Kidwind:
出现这样的错误ViewDoesNotExist at /con ...
django的jsCalendar的widget -
hanyh:
我的项目比较小,就直接写在views.py里面了。你出现的是什 ...
django的jsCalendar的widget -
Kidwind:
请问JsCalendarWidget应该放在哪个位置,我的是放 ...
django的jsCalendar的widget
共享内存计数的时候没有锁定,会造成少量的更新遗失,不过对整体来说,遗失的数据量没有大的影响。
<?php /** * * * 每个进程都单独连接数据库 * */ //configruation parameters $tbl_id = 0; $count_per_process = 10; $concurrents = 100; $logpath = "/tmp/s.log"; $host = "10.218.26.75"; $user = "user"; $pwd = "pwd"; $db = "test"; $port = 3306; $sep = 1000; $uid_count = 100000; $uid_path= 100000; if ($argc != 13) { echo "Usage:php multiprocess.php tbl_id concurrents count_per_process logpath host user pwd db port sep_counts uid_count uid_path\n"; echo "Usage:php multiprocess.php 表ID 并发数 每进程多少次 记录路径 主机 用户 密码 数据库 端口 多少条记录一次 用户数 用户UID保存路径\n"; exit(1); } else { $tbl_id= trim($argv[1]); $concurrents = (int)trim($argv[2]); $count_per_process= (int)trim($argv[3]); $logpath = trim($argv[4]); $host = trim($argv[5]); $user = trim($argv[6]); $pwd = trim($argv[7]); $db = trim($argv[8]); $port = trim($argv[9]); $sep = trim($argv[10]); $uid_count= (int)trim($argv[11]); $uid_path = trim($argv[12]); if($uid_count < $concurrents and ($uid_count % $concurrents !=0 )) { die("UID数必须多过并发进程数并曲uid数必须是进程数的整数倍\n"); } $uid_count = $uid_count / $concurrents; } $shm_key = ftok(__FILE__, 't'); $shm_id = shmop_open($shm_key, "c", 0644, 100); shmop_write($shm_id, 0, 0); $m_start= microtime(true); $conf = array( 'count' => $count_per_process, 'host' => $host, 'user' => $user, 'pwd' => $pwd, 'db' => $db, 'port' => $port, 'logpath' => $logpath, 'shm_id' => $shm_id, 'tbl_id' => $tbl_id, 'sep' => $sep, 'uid_count' => $uid_count, 'uid_path' => $uid_path, ); error_log("+++++++++++++++++++++begin++++++++++++++++\n",3,$logpath); error_log("$m_start\n",3,$logpath); for ($i = 1; $i <= $concurrents; ++$i) { $pid = pcntl_fork(); if (!$pid) { $worker = new Simulator(getmypid(),$conf); $worker->execute(); exit($i); } } //main process while (pcntl_waitpid(0, $status) != -1) { $status = pcntl_wexitstatus($status); echo "Child $status completed\n"; } $m_end = microtime(true); $m_duration = $m_end - $m_start; echo "total time consumes:".$m_duration."\n"; $shm_size = shmop_size($shm_id); $counter_str= shmop_read($shm_id, 0, $shm_size); echo "shm counter :$counter_str\n"; $e =(int)$count_per_process * (int)$concurrents; echo "theory counter :$e \n"; if (!shmop_delete($shm_id)) { echo "Couldn't mark shared memory block for deletion."; } shmop_close($shm_id); error_log("$m_end\n",3,$logpath); error_log("+++++++++++++++++++++end++++++++++++++++\n",3,$logpath); class Simulator{ private $link; private $pid; private $sep; //每隔多少条记录时间 private $tbl_id; private $uid_path; private $uid_count; private $uid_tmp_count; private $uid_is_ok; private $uid_data; private $count; private $logpath; private $error_path = "error.log"; private $counter=0; private $domains = array(".com",".cn",".info",".org",".net",".biz",".mil",".net",".jp",".tw"); private $domain_size; function __construct($pid,$conf) { $this->pid= $pid; if($conf['tbl_id'] == 0) { $this->tbl_id= ''; } else { $this->tbl_id= $conf['tbl_id']; } $this->domain_size = count($this->domains)-1; $this->count = $conf['count']; $this->sep = (int)$conf['sep']; $this->shm_id = $conf['shm_id']; $this->logpath = $conf['logpath']; $this->uid_path = $conf['uid_path']; $this->uid_count = (int)$conf['uid_count']; $this->uid_is_ok = false; //关键字 $this->uid_tmp_count = 0; // $this->link = mysql_connect($conf['host'].":".$conf['port'],$conf['user'],$conf['pwd']); if(!$this->link) { var_dump($conf); die("connected faild:".mysql_error()); } $db_selected = mysql_select_db($conf['db'],$this->link); if(!$db_selected) { die("can't use db:".mysql_error()); } } function __destruct() { if($this->link) { mysql_close($this->link); } if($this->uid_is_ok) { //echo "destory"; $path = $this->uid_path; //$path = $this->uid_path."-$this->pid"; $fp = fopen($path,"a"); if($fp) { $contents = ""; $i = 1; foreach($this->uid_data as $uid) { if($i % 2000 == 0) { $contents .= $uid."\n"; fwrite($fp,$contents); $contents = ""; } $contents .= $uid."\n"; } fwrite($fp,$contents); fclose($fp); } } } private function inc() { $counter_str= shmop_read($this->shm_id, 0, 100); $c = (int) $counter_str + 1; if($c % $this->sep == 0) { error_log(microtime(true)." $c\n",3,$this->logpath); } shmop_write($this->shm_id, $c, 0); } public function execute() { $start = microtime(true); $this->pre = microtime(true); // echo $this->count; for($i = 0;$i < $this->count;$i++) { $uid = $this->getUid(); $email = $this->getEmail(); $name = $this->getName(); $sql = "INSERT INTO contact{$this->tbl_id}(uid,name,email) VALUES ($uid,'$name','$email')"; $result = mysql_query($sql,$this->link); $this->inc(); if(!$result) { error_log(mysql_error()."\n",3,$this->error_path); } } $end = microtime(true); $duration = $end - $start; //$line = "process ".$this->pid." ".$count." ".$duration."\n"; //echo "$line"; // error_log($line,3,$this->logpath); } private function getEmail() { $email = $this->getName()."@".$this->getName().$this->domains[mt_rand(0,$this->domain_size)]; //echo $email."\n"; return $email; } private function getName() { $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; $size = strlen($chars); mt_srand((double)microtime()*1000000*getmypid()); $i = mt_rand(6,18); $output = ""; while(strlen($output)<$i) $output.=substr($chars,(mt_rand() % $size),1); return $output; } private function getUid() { if($this->uid_is_ok) { return $this->uid_data[mt_rand(0,$this->uid_count-1)]; } else { mt_srand((double)microtime()*1000000*getmypid()); $uid = mt_rand(1000000000,9999999999); $this->uid_data[] = $uid; $this->uid_tmp_count += 1; if($this->uid_tmp_count == $this->uid_count) { $this->uid_is_ok = true; } return $uid; } } } ?>
发表评论
-
使用syslog-ng进行日志中心化(一)
2009-12-16 18:44 1074一个日志中心化设计收集项目,前端有230台的服务器,使用sys ... -
phpunit 实践(1)
2009-12-02 17:41 0如何测试抽象类 Phpunit作为功能测试、单元测试的一种工 ... -
异步数据处理
2009-11-24 15:19 0对量很大的操作,有时需要对数据进行异步处理,如记录论坛的点击数 ... -
改用phpt作为默认的测试框架
2009-11-20 11:36 1181以前作PHP测试的时候经常用PHPUNIT,现在个人倾向用ph ... -
yahoocn邮箱登录脚本
2009-11-12 18:15 5988最近发现线上登录Yahoo邮箱取地址薄的代码不能用了,调试发现 ... -
register_shutdown_function vs __destruct
2009-11-12 17:46 1674php中为什么有了 __destruct函数后还没有把regi ... -
如何检测效率(PHP)问题:TODO
2009-10-26 16:58 995基本上代码要关心: 时间(CPU) 空间(内存) IO(磁盘读 ... -
php框架特性
2009-10-23 11:47 0why php框架? http://www.nyphp.org ... -
phpinfo()包含足够多的配置信息
2009-10-21 16:13 851如果自己编译安装不知道啥配置在那里,在这里面找 -
PECL安装
2009-09-16 23:05 1700需要autoconf 需要header 多版本需要指定路径 / ... -
核心差异在于异常处理
2009-09-15 22:03 8311,mysql主从同步生效怎么办? 2,mc失效怎么办? 3, ... -
分库和分表
2009-07-23 10:42 95341,背景:一个地址薄的应用程序,设计的用户量为2亿,统计出每个 ... -
事务型和社区型网站语言的选择?
2009-07-21 15:28 876javaeye用ruby;facebook用php;sina用 ... -
安全意识
2009-07-14 15:30 927一,分类 Rotational(ceasar)轮转 trans ... -
分析php文件的调用关系图
2009-07-14 14:50 2269step1:下载0.3 http://t3.dotg ... -
php vld 安装使用
2009-07-14 14:31 1731cvs -d :pserver:cvsread@cvs.x ... -
DJP Hash
2009-05-26 14:52 975HASH_OU_NUMS-->函数 funct ... -
php引用
2009-05-06 10:58 902引用 <?php function foo($bar){ ... -
PHP参考手册中的openlog函数说明误导
2009-04-23 12:06 1925PHP参考手册中的openlog函数说明如下: openlo ... -
PHP同时加载zendDebugger和xdebug会冲突
2008-12-31 14:15 1429会导致php无法正常饯行,注释掉一个 [debugger] # ...
相关推荐
- **调试和优化**:通过模拟测试,观察多线程环境下数据互导的性能,对源码进行调优,提高数据传输速度和资源利用率。 6. **工具使用**: - **开发工具**:如IDEA、Eclipse等集成开发环境,辅助编写和调试Java...
可能需要设计一个包含多种测试场景的基准测试框架,以便更全面地评估两个数据库在多线程环境下的表现。 在实际应用中,选择MySQL还是Access通常取决于项目需求。MySQL适合大型、高性能的Web应用,提供强大的扩展性...
数据插入数据库5种方式工具源码 功能描述: 基本Insert Into 单线程Bulk Insert 多线程Bulk Insert 单线程SqlBulkCopy 多线程SqlBulkCopy 试验的5种方法,比较各种方法的导入速度 要把导入的文件放在C盘如:c:\\20...
4. **优化数据库设计**:确保目标表有良好的索引和分区策略,可以进一步提高插入速度。 5. **减少数据库往返**:尽量减少不必要的数据库查询,例如,通过一次性获取所有需要的数据库对象,而不是在循环中多次查询。...
根据文档标题“ob多线程插入报错.docx”及其描述“ob多线程插入报错.docx”,可以推断出该文档主要关注的是在使用OceanBase(简称OB)数据库时,在进行多线程插入操作过程中出现的错误情况。这种错误通常表现为死锁...
在本项目中,我们主要探讨的是一个基于Python实现的FTP(File Transfer Protocol)服务器,它融合了数据库存储、多线程处理以及SocketServer模块。FTP是互联网上广泛使用的文件传输协议,允许用户从远程服务器上传、...
1. **性能测试**:通过模拟大量并发读写操作,测试BDB在不同工作负载下的响应速度和吞吐量,帮助优化数据库配置以达到最佳性能。 2. **压力测试**:在高并发环境下运行测试,检测BDB在极限条件下的稳定性和耐久性,...
9. **测试与调试**:多线程系统的测试更为复杂,需要对并发场景进行充分的测试,确保在高并发情况下系统的稳定性和正确性。 通过上述分析,我们可以看出,“湖北多线程注册”是一个涉及到并发处理、线程安全、资源...
1. **多线程模拟**:Webbench 可以创建多个线程,每个线程代表一个并发用户,模拟真实用户对数据库的操作,如查询、插入、更新和删除。 2. **自定义脚本**:测试可以使用预定义或自定义的脚本来模拟特定的应用场景...
JMeter的多线程框架是其进行大规模并发测试的关键。通过创建大量的虚拟用户(即线程),JMeter能够模拟真实世界的高并发场景,从而对数据库的响应时间和资源消耗进行准确测量。此外,JMeter还提供了一系列图形化报告...
MySQL具有体积小、运行速度快、可移植性强的特点,它支持多用户、多线程、跨平台,并提供丰富的编程接口。 三、数据库中的术语 在数据库中,“关系”指的是一张二维表(类似于Excel表格);“属性”指的是二维表中...
3. 并发控制:为了模拟真实世界中的并发访问,脚本可能包含多线程或异步处理,使得多个插入操作同时进行,增加数据库的压力。 4. 性能监控:在执行脚本的过程中,需要记录和分析数据库的性能指标,如CPU使用率、内存...
然而,实际应用中,可能还需要考虑其他因素,如数据库索引的影响、数据分批插入的大小优化、并发插入的策略等,这些都会对插入速度产生影响。 此外,`DBUtil`通常是一个工具类,用于管理数据库连接的打开和关闭,以...
在C# 3.5中,多线程和线程池是提高程序执行效率和并发能力的重要工具。本文将深入探讨如何高效地使用线程池进行多线程编程。 线程池是一种管理线程资源的技术,它能有效地管理和调度线程,避免了频繁创建和销毁线程...
- **并行处理**:如果硬件资源允许,可以考虑多线程并行插入,但需注意并发控制。 4. **数据分片**:对于特别大的数据量,可以考虑数据分片,将数据分散到多个表或数据库中,以减轻单一表的压力。 5. **监控与...
在本文中,我们将深入探讨“sqlite3-stress”工具,它专门设计用于进行多线程写入 SQLite3 数据库的压力测试。这个工具可以帮助开发者评估 SQLite3 在并发环境下的性能和稳定性,确保在高负载情况下仍然能正常运行。...
- **批量插入与更新**:在多线程环境下,可以将大量数据分成小批量,由多个线程并行处理,从而提高效率。JDBC的PreparedStatement提供了批处理功能,可以有效地减少数据库交互次数,提升性能。 - **线程池的使用**...
4. **多线程访问**:FastDB支持多线程并发访问,保证了在多线程环境下的数据安全。 5. **Java接口**:通过libjnicli.so,FastDB能够与Java应用程序无缝集成,方便Java开发者使用。 **二、libjnicli.so的生成与使用*...
- 在多线程环境下,每个线程可以拥有自己的数据库连接,互不干扰,实现并发访问。 10. **应用场景**: - 测试环境:内存数据库启动快速,数据不会污染生产环境。 - 高性能缓存:如Redis,尽管不是纯Java实现,但...