2013-02-18 65 views
2

我为我的应用创建了1MB的shread内存空间。PHP和shared_memory:如何检测共享内存段中的“空闲空间”?

每个用户作为一个且只有一个阵列的一些信息,从约10并发进程入店,它的显示器上,用户可以看到每一个过程的进度。

Evey进程清理它从客户端数组中拥有的值。

但是...在不断增长的情况下......用“在时间的每一刻”每一个1空数组1个畅想用户会给我这个

shm_put_var():没有留下足够的共享内存

...我如何检测共享区域的大小是“低”?因此,我可以成长吧

编辑:我usuing shm_ functionts(例如shm_get_var()

在这组功能,没有告诉我,空间不足内存中的数据损坏之前...

+1

这并不是告诉你该地区低,它告诉你它的损坏......它不同于缺乏空间。 – Ross 2013-02-18 10:43:47

+0

是的,我编辑的问题...我从日志复制/粘贴错误的行 – realtebo 2013-02-18 10:46:31

+1

欢迎来到堆栈溢出。请注意,撰写问题时,您有一个带有几个按钮的工具栏,用于输入源代码,添加引用并创建链接。确保你从现在开始使用它们;-) – 2013-02-18 10:51:53

回答

1

您可以使用shell命令,但这取决于您的托管服务允许的内容,如果这样使用的话。

用了shell_exec(),你可以调用系统函数来读取你的操作系统的任务管理器。

对于OSX,例如,你可以使用“顶”命令行功能来实时检索的可用内存。最简单的方法是转储整个活动表并使用正则表达式来获取PHP进程。

+0

呃...我需要知道我正在使用的共享内存段中剩余的可用空间... – realtebo 2013-02-18 10:47:25

+0

对不起,我不是很清楚;您可以阅读memory_get_usage()并通过使用SHELL命令获取活的空闲内存。这样您就可以比较使用情况以适应您的需求。在OSX上,您可以在终端(因此; bash/shell)中获取活动监视器表并获取实时内存使用情况。该命令是“顶部” – 2013-02-18 10:55:09

+0

不,我不清楚,不是你。 我的意思是:我需要知道在共享内存的特定段落上留下的可用空间 – realtebo 2013-02-18 18:03:59

2

也许你可以估算你缓存对象的大小,并跟踪剩余的空间你自己,通过使用像那些实用的功能:

public static function getSize($object){ 
    return self::formatBytes(strlen(serialize($object))); 
} 

public static function formatBytes($bytes, $precision=2){ 
    $units = array('B', 'KB', 'MB', 'GB', 'TB'); 
    $bytes = max($bytes, 0); 
    $pow = floor(($bytes ? log($bytes) : 0)/log(1024)); 
    $pow = min($pow, count($units) - 1);  
    $bytes /= pow(1024, $pow); 
    return round($bytes, $precision).' '.$units[$pow]; 
} 

这可能不是总是100%准确,但应该来接近真实的物体尺寸。