問題タブ [brk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 長時間実行プロセスのデバッグ。ストレース、ブレイク
私はMagento Webshopを持っています.cronジョブを実行して、スケジュールされたプロセスを実行します。その一つが製品の輸入です。製品のインポートとカテゴリへの割り当てを担当します。SQL の状態によると、この部分が完成したことがわかります。キャッシュを無効にしようとした後。キャッシュについては、tcp で memcache を使用するか、ソケットで redis を使用しようとしています。どちらのオプションでも同じ結果が得られます。strace コマンドを使用して、何をしようとしているのかを確認します。
過去 2 時間の出力は次のとおりです。
brk を使用してメモリを割り当てることは知っています。
他の出力は何を意味しますか? そのような行動の理由は何ですか?何か案は?
linux - プログラムブレークの現在位置を見つける方法
これをbrkシステムコール関数内に追加してみました:
しかし、カーネルのコンパイル中に sbrk 関数の暗黙の宣言というエラーが返されました。そして、sbrkが定義されている場所を見つけることができませんでした!! ユーザー プロセスがプログラム ブレーク アドレスを拡張しようとするたびに、現在のプログラム ブレーク アドレスがわかれば、プロセスが要求しているメモリ量を測定できます。
ありがとうございました。
linux - i386 Linux のアセンブリで BRK を上げる
x86 メモリ アクセス セグメンテーション エラーを見つけて調査しましたが、私のコードでは機能しません。おそらく違いは、個別の .text セグメントと .data セグメントを使用せず、カスタム ELF ヘッダーを作成してすべてを 1 つのセグメントに保持することです。SYS_BRK 呼び出しが失敗する理由を説明していますか?
その後、プログラムはメモリ ページの読み取り/書き込み/実行などを行います。問題を説明する最小限のコード サンプルを見つけようとしました。
kdbg ではサンプルは機能しますが、コマンド ラインから開始すると機能しないため、メッセージが表示されます。
c - 内部で mmap を 1 回だけ呼び出す複数の malloc 呼び出し
以下のコードを試してみると、malloc api の内部呼び出しを明確に分析できません。システム コール mmap が 2 つ以上の malloc 呼び出しに対して 1 回だけ呼び出されることは明らかではありません。4069 バイト以上を割り当てている場合は、それも内部で 1 つの mmap のみを呼び出しています (トレースは strace -p processid を使用して識別されます)。
トレース出力:
私が探しているのは、mallocが複数回使用されている場合、メモリが4096を超える2つのmallocで超過しているため、複数のmmapを呼び出すことです
assembly - ヒープサイズを変更できません AMD64
brk を変更してヒープ サイズを 100 増やしようとしていますが、コードが機能しない理由がわかりません。
これを実行しようとするコードの一部を次に示します。
x (print InicialHeap
)
x + 100 (print InicialHeap + 100)
x (print InicialHeap)
しかし、同じ結果 "x" を 3 回しか出力しません。
ヒープサイズを増やすにはどうすればよいですか?
assembly - 32 ビット nasm アセンブリで sbrk を模倣する
こんにちは、私の 2 年目のコンピューター サイエンス プロジェクトでは、32 ビットの nasm アセンブリでガベージ コレクターを作成することを任されました。1つのことを除いて、すべてを正常に実行することができました。brk へのシステム コールを使用して、gclib sbrk 関数を模倣するとします。
ここに私の作業バージョンがあります:
sbrk を取り除くために、次のことを行いました。これにより、まったく別の機能でセグメンテーション違反が発生します。
abrk 関数は次のとおりです。
何が間違っているのかわかりません。講師に尋ねましたが、彼も間違いを見つけることができませんでした。
また、動作しないバージョンは私の大学の研究室のPCでは動作しましたが、私のものでは動作しませんでした.ubuntuのバージョンの違いが原因でしょうか? 助けてくれてありがとう。
debugging - Strace は brk の呼び出しを検出しますが、GDB はブレークポイントで停止しません
私はかなり長い間メモリリークのデバッグを試みてきました。私の主な問題は、Valgrind などの適切なツールを使用できないことです。そのため、単純な GDB + strace に落ち着きました。
私のプログラムはループです。反復ごとに、いくつかのオブジェクトを作成し、それらのデストラクタを呼び出します。hereで説明されているように、ループの最初の反復での最初の割り当ての後、プログラムは常に同じオブジェクトを割り当てているため、常に同じスペースを再利用する必要があるため、より多くのメモリを要求するべきではありません。それでも、私のプログラムはbrk()
15 回の反復ごとに呼び出し、渡される引数は毎回brk
4.096 ずつ増加します (1 回目: brk(0xb7887000) = 0xb7887000
、2 回目: brk(0xb7888000) = 0xb7888000
、3 回目:brk(0xb7889000) = 0xb7889000
など)。
次に、GDB を自分のプログラムにフックして、プログラムを数回実行し、brk にブレークポイントを設定してみました(gdb) break brk
。
アドレスにブレークポイントを設定すると表示されますが、プログラムを 15 回以上繰り返し実行しても、ブレークポイントが「呼び出される」ことはありません (?)。
なぜそれが起こっているのですか?どうすれば何が起こっているのか理解できますか?