社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
当我web前端向php请求数据时,几千条记录都能正常获取,但是要请求几万条记录的时候php就不响应了。
PHP5中,对于memory_limit的设定已经从以往的8M扩大到128M的上限。
对于配置中的定义解释是: memory_limit = 128M ; Maximum amount of memory a scriptmay consume (128MB) 最大单线程的独立内存使用量。
也就是一个web请求,给予线程最大的内存使用量的定义。
memory_limit的内存分配,标配是128M。一旦独立的线程超过了128M,那PHP会报错: Fatal error: Allowed memory size of 33554432bytes对于8G内存的服务器,如果同时并发的响应达到50,每个都是128M的峰值,那估计也是服务器会卡死的时候。
尽量降低128M的内存配置,如果调整至64M,服务器的负载基本能下降一半左右,如果能调整至32M效果更好。但是对于应用的要求就更高,很多表建立初期就没有考虑到这个问题,如果你要采用memcache作为数据的存储,必须提前完成优化数据表的设计部署,降低独立线程PHP的内存使用量,服务器的响应和负载降低的就不仅仅是几个百分点的效果了。
2、max_execution_time = 30 改高一点,或者在代码里set_time_limit(800);
当你的页面有大量数据时,建议使用set_time_limit()来控制运行时间,配置该页最久执行时间。设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误,时间是秒单位。
(a)、php.ini:它预设的限制时间是30秒,max_execution_time的值定义在结构档案中,如果将秒数设为0,表示无时间上的限制,修改后重新启动apache/nginx服务器
(b)、php代码里使用函数:set_time_limit(800);
这个函数指定了当前所在php脚本的最大执行时间为800秒,实际上最大执行时间=php.ini里的max_execution_time数值 - 当前脚本已经执行的时间 + 设定值
假如php.ini里的max_execution_time=30,当前脚本已经执行5秒,则:
最大执行时间=30-5+800=825秒。
注意 : 当PHP是执行在安全模式时,set_time_limit( )将不会有结果,除非是关闭安全模式或是修改结构档案中的时间限制。
(c)、php长连接
如果我们需要一个脚本持续的运行,那么我们就要通过php长连接的方式,来达到运行目的。通过 set_time_limit 来设置一个脚本的执行时间为无限长;然后使用 flush() 和 ob_flush() 来清除服务器缓冲区,随时输出脚本的返回值。
如果是异步崩溃,那么就是数据量太大了。可以考虑如上所说的分页。减少每次的数据量。如果说减少不了,那么就考虑其他的办法,如压缩,把key压缩成一个字母,在你的程序里面一个key的压缩就节省了几万个字母了。再者就是返回的时候,不返回无用字段
Connection:keep-alive
'DB_HOST' => '127.0.0.1', // 服务器地址
http {
keepalive_timeout 65;
fastcgi_connect_timeout 100000;
fastcgi_send_timeout 100000;
fastcgi_read_timeout 100000;
fastcgi_buffer_size 256k;
fastcgi_buffers 64 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!