我有一堆客户端销售点(POS)系统,这些系统定期将新的销售数据发送到一个集中的数据库,该数据库将数据存储到一个大数据库中,以便生成报告。
客户机POS基于PHPPOS,我实现了一个模块,该模块使用标准XML-RPC库将销售数据发送到服务。服务器系统构建在CodeIgniter上,并为webservice组件使用XML-RPC和XML-RPC库。每当我发送大量的销售数据(从销售表中只有50行,从sales_items中单独的行用于销售中的每个项目),我得到以下错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)
128M是php.ini中的默认值,但我认为这是一个巨大的数字。事实上,我甚至尝试过将这个值设置为1024M,它所做的只是花费更长的时间来出错。
至于我所采取的步骤,我已经尝试在服务器端禁用所有处理,并对其进行了修改,使其返回一个罐装响应,而不管输入是什么。但是,我认为问题出在数据的实际发送上。我甚至尝试过禁用PHP的最大脚本执行时间,但它仍然出错。
页面崩溃?
(它发生在MySQL必须查询大行时。默认情况下,memory_limit被设置为小,这对硬件来说更安全。)
在增加php.ini之前,您可以检查系统现有内存状态:
# free -m
total used free shared buffers cached
Mem: 64457 63791 666 0 1118 18273
-/+ buffers/cache: 44398 20058
Swap: 1021 0 1021
在这里,我增加了如下所示,然后执行service httpd restart来修复崩溃页面问题。
# grep memory_limit /etc/php.ini
memory_limit = 512M
页面崩溃?
(它发生在MySQL必须查询大行时。默认情况下,memory_limit被设置为小,这对硬件来说更安全。)
在增加php.ini之前,您可以检查系统现有内存状态:
# free -m
total used free shared buffers cached
Mem: 64457 63791 666 0 1118 18273
-/+ buffers/cache: 44398 20058
Swap: 1021 0 1021
在这里,我增加了如下所示,然后执行service httpd restart来修复崩溃页面问题。
# grep memory_limit /etc/php.ini
memory_limit = 512M