エラーメッセージ:
--------------------------------------------- -------
: (
許容メモリ サイズ 1916796928 バイトが使い果たされました (3086655745 バイトを割り当てようとしました)
ファイル:/Data/XXX/Common/Function s.php 行: 370
Thinkphp3.2.2 { 高速かつシンプルOOP PHP フレームワーク } -- [ 考えるだけでできる ]
---------------------------------- --------------------
環境はphp5.4+nginx+mysql、マシンはAlibaba Cloudホスト、メモリは1024mです
そのようなことに遭遇した人はいますか?問題は何ですか?
どうすれば解決できますか? www.conf のmemory_limit を変更した後もこの問題が発生します
一度に 2.8G が必要ですか?行は次のようなものです:
return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function($match){return strtoupper($match[1]);}, $name));
191679692 8b (1828M) の使用可能なメモリ
3 を申請します086655745b ( 2943M) スペースに失敗しました
処理される変数 $name に明らかに問題があります
Runtime ディレクトリをクリアしても、問題はまだ解決されていません
2 日経ちましたが、問題はまだ解決されていません! 解決策...
フレームワークがメモリを消費します。
フレームワークがどれだけのメモリを消費しても、おそらく無限ループになり、スペースが空き続けます。問題、書かないでください
$b = preg_replace_callback('/_([a-zA-Z])/', 'aaa', $name)
function aaa($match){
Return strtoupper($match[1]);}
_([a-zA-Z]) を置き換えて最初から検索するため、無限ループになる可能性があります終了させる必要があります。
たとえば、停止するには _ を削除します おそらく、別の解決策を使用できます: preg_replace、preg_match_all、preg_split
まあ、フレームワークがどれだけのメモリを消費しても、2G を消費することはできません
おそらく無限ループで常にスペースが開かれます。
問題がその文にあると確信している場合は、それほど複雑に書かないでください
$b = preg_replace_callback('/_([a-zA-Z])/', 'aaa', $name)
return ucfirst($ b);
function aaa($match){
return strtoupper($match[1]);
_([a-zA-Z]) を置き換えて最初から開始するためかもしれません、つまり無限ループになるので、何らかの方法で終了させる必要があります。
別の解決策としては、preg_replace、preg_match_all、preg_split が考えられます
----------- ---------- --------------------
これはフレームワーク内のコードです。私が書いたものではありません。
リフレッシュ後、再度以下の問題が発生しました。再度リフレッシュしても上記のメモリ問題が交互に発生します。
------------------
502 Bad Gateway
nginx/1.4.1
プログラムの書き方が間違っている可能性があります。間違っているため、基礎となるフレームワークが無限ループを作成します。
これを実行すると、制御できる論理フローがわかります。
3.0 を見てみましたが、あなたが言及したような機能はないようです
http://doc.thinkphp. cn/reference/functions.html
バージョンが古い可能性がありますか?
ああ、3.2.2 を読み間違えました。9 階を押して実行してください。
http://document.thinkphp.cn/manual_3_2.html
一度に 2.8G 必要ですか?
--------- ----- ----------------
問題の原因は、preg_replace_callback にメモリ リークがあることです。 Windows では問題ありませんが、Linux 5.4.22 では突然上記の問題が発生します。
問題は、Linux で php5.4 を使用すると、TP32 で上記の問題が発生する可能性があることです。
我的php环境是 5.4.22.
很奇怪!即便我判定是 bug,那也不能说明什么
什么东西一次要2.8G?
我怀疑是你的程序哪里错了,可能是写法错了,使底层框架产生死循环。
你这样做,查看你可控的逻辑流程。
从上面开始,一句句往下添加exit();(当然你可以用二分法找)
直到开启哪一句使得出现这个问题,就是那句错了。
查一下那句用到了什么函数,打印一下变量,看看传参顺序有没有错。
不行的话把那句及附近的代码贴上来让大家帮你看看
var_dump(preg_replace_callback('/\w{2}/',function($m)use(&$i){ echo ' i='.$i++; return $m[0]."cc ";},'abcd2acc'));
自己写了个自认为比TP优秀多的框架YuYan PHP,从根本上解决了此问题。