这是一个面试问题:
给定一个包含40亿个整数的输入文件,提供一个算法来生成一个未包含在文件中的整数.假设您有1 GB内存.如果您只有10 MB内存,请跟进您的操作.
我的分析:
文件大小为4×10 9 ×4字节= 16 GB.
我们可以进行外部排序,因此我们可以了解整数的范围.我的问题是在排序的大整数集中检测缺失整数的最佳方法是什么?
我的理解(阅读完所有答案后):
假设我们正在讨论32位整数.有2 ^ 32 = 4*10 9个不同的整数.
情况1:我们有1 GB = 1*10 9*8位= 80亿位内存.解决方案:如果我们使用一个代表一个不同整数的位,那就足够了.我们不需要排序.执行:
int radix = 8;
byte[] bitfield = new byte[0xffffffff/radix];
void F() throws FileNotFoundException{
Scanner in = new Scanner(new FileReader("a.txt"));
while(in.hasNextInt()){
int n = in.nextInt();
bitfield[n/radix] |= (1 << (n%radix));
}
for(int i = 0; i< bitfield.lenght; i++){
for(int j =0; j<radix; j++){
if( (bitfield[i] & (1<<j)) == 0) System.out.print(i*radix+j);
}
}
}
Run Code Online (Sandbox Code Playgroud)
情况2:10 MB内存= …
我有一堆客户销售点(POS)系统,它定期将新的销售数据发送到一个集中数据库,该数据库将数据存储到一个大数据库中以生成报告.
客户端POS基于PHPPOS,我已经实现了一个使用标准XML-RPC库将销售数据发送到服务的模块.服务器系统基于CodeIgniter构建,并使用XML-RPC和XML-RPCS库作为Web服务组件.每当我发送大量销售数据(销售表中只有50行,以及sales_items中与销售中每个项目相关的各行)时,我会收到以下错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)
Run Code Online (Sandbox Code Playgroud)
128M是默认值php.ini
,但我认为这是一个很大的数字.实际上,我甚至尝试将此值设置为1024M,而它所做的只是花费更长的时间来输出错误.
至于我采取的步骤,我已经尝试禁用服务器端的所有处理,并且已经操纵它以返回固定响应而不管输入如何.但是,我认为问题在于实际发送数据.我甚至尝试禁用PHP的最大脚本执行时间,但它仍然出错.
正在显示此错误消息,有任何建议吗?
在php中允许的内存大小为33554432字节(试图分配43148176字节)
由于不好的原因,我需要为一个目录设置高于1G的memory_limits,但是在我放在Lenny服务器上的PHP 5.2.17上,例如2048M,我只得到php.ini默认值(256M).
PHP作为apache模块运行,phpinfo给我们(用于目录)
memory_limit 1024M 256M
suhosin.memory_limit 0 0
Run Code Online (Sandbox Code Playgroud)
由于apache模块或PHP conf有限制吗?我知道服务器只有4G的RAM,它只是一个特殊的脚本.
我有一个问题是增加PHP作为Apache模块的内存限制.
如果我在Apache配置中放入以下指令,那么工作正常:
php_value memory_limit 1.99G
Run Code Online (Sandbox Code Playgroud)
但是超过2GB不起作用,它将这个值恢复到128MB.
这里有什么问题?我需要更多的内存来处理一些PDF相关的任务.
服务器是Debian 2.6.32-5-amd64#1 SMP,PHP 5.3.3-7 + squeeze13,带有12GB物理RAM.
致命错误:允许的内存大小为67108864字节耗尽(尝试分配13965430字节)
PHPInfo显示我有一个128M的memory_limit,所以我很困惑为什么错误说我只有64M.phpinfo是否可能报错?或者为PHP使用两个单独的php.inis?
该错误是由我的一个同事在我不知情的情况下添加的一个主要php文件中的ini_set调用引起的.
我需要检查是否memory_limit
至少64M
在我的脚本安装程序中.这只是应该工作的PHP代码的一部分,但可能是因为这个"M"它没有正确读取值.如何解决这个问题?
//memory_limit
echo "<phpmem>";
if(key_exists('PHP Core', $phpinfo))
{
if(key_exists('memory_limit', $phpinfo['PHP Core']))
{
$t=explode(".", $phpinfo['PHP Core']['memory_limit']);
if($t[0]>=64)
$ok=1;
else
$ok=0;
echo "<val>{$phpinfo['PHP Core']['memory_limit']}</val><ok>$ok</ok>";
}
else
echo "<val></val><ok>0</ok>";
}
else
echo "<val></val><ok>0</ok>";
echo "</phpmem>\n";
Run Code Online (Sandbox Code Playgroud) 当我尝试在我的wordpress脚本中打开我的一个仪表板页面时出现错误
错误消息如下:
致命错误:第2685行/home/admin/domains/filesick.com/public_html/wp-includes/taxonomy.php中允许的内存大小为268435456字节(尝试分配71个字节)
我四处询问并被告知我必须将memory_limit增加到高于256M的值,因此我将其更改为512M仍然是同样的问题.然后我把它改为3024M,这就是我现在所拥有的,但这并没有解决问题.
那么请你告诉我如何解决这个问题,我该怎么办?
等待你的答复.
在PHP中,我经常面临内存限制问题.特别是像Drupal等高资源集成系统.
我想知道的是:
编辑:
作为一个场景,例如在Drupal中,当我们通过Web Panel(不是Drush或任何脚本)清除CACHE时,它需要如此多的内存.所以即使只针对这种情况,我肯定需要目前大约512MB的高限制.
我有两个域,webhosted在000webhost上.我在它们上安装了wordpress,并且有些日子它运行良好,但现在它向我显示以下错误:
致命错误:允许的内存大小为67108864字节耗尽(尝试分配122880字节)
错误的来源("in ...")永远不会相同(它总是会改变).
我发现这个错误很常见,但在这里我没有php.ini文件.我明白我应该更改wp-config文件.好吧,这里有一个问题:我应该怎么做?我明白我应该补充一下
define (‘WP_MEMORY_LIMIT’, ‘...M’); // increase limit to ..M" (adding 64, 96 or 128)
Run Code Online (Sandbox Code Playgroud)
[感谢http://www.dummies.com/how-to/content/optimizing-the-wordpress-configuration-file.html
]
我不擅长编程(只是一个想要自己域名的新手),你能帮助我吗?请在那里我确切地放置功能.如果这不是如何解决问题,请提供另一种解决方案.我非常需要帮助:)
我不能在这里发布文件(似乎我没有很好地格式化),但我可以解释结构:
那么,我应该在哪里介绍这个define
函数(如果在这个文件中,在哪里?),如果在另一个,哪个和哪里?
memory-limit ×10
php ×9
memory ×3
wordpress ×2
algorithm ×1
codeigniter ×1
fatal-error ×1
file ×1
performance ×1
search ×1
xml-rpc ×1