2013-02-18 27 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%準確,但應該來接近真實的物體尺寸。