問題タブ [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.

0 投票する
1 に答える
1195 参照

php - 長時間実行プロセスのデバッグ。ストレース、ブレイク

私はMagento Webshopを持っています.cronジョブを実行して、スケジュールされたプロセスを実行します。その一つが製品の輸入です。製品のインポートとカテゴリへの割り当てを担当します。SQL の状態によると、この部分が完成したことがわかります。キャッシュを無効にしようとした後。キャッシュについては、tcp で memcache を使用するか、ソケットで redis を使用しようとしています。どちらのオプションでも同じ結果が得られます。strace コマンドを使用して、何をしようとしているのかを確認します。

過去 2 時間の出力は次のとおりです。

brk を使用してメモリを割り当てることは知っています。

他の出力は何を意味しますか? そのような行動の理由は何ですか?何か案は?

0 投票する
2 に答える
644 参照

linux - プログラムブレークの現在位置を見つける方法

これをbrkシステムコール関数内に追加してみました:

しかし、カーネルのコンパイル中に sbrk 関数の暗黙の宣言というエラーが返されました。そして、sbrkが定義されている場所を見つけることができませんでした!! ユーザー プロセスがプログラム ブレーク アドレスを拡張しようとするたびに、現在のプログラム ブレーク アドレスがわかれば、プロセスが要求しているメモリ量を測定できます。

ありがとうございました。

0 投票する
1 に答える
188 参照

linux - i386 Linux のアセンブリで BRK を上げる

x86 メモリ アクセス セグメンテーション エラーを見つけて調査しましたが、私のコードでは機能しません。おそらく違いは、個別の .text セグメントと .data セグメントを使用せず、カスタム ELF ヘッダーを作成してすべてを 1 つのセグメントに保持することです。SYS_BRK 呼び出しが失敗する理由を説明していますか?

その後、プログラムはメモリ ページの読み取り/書き込み/実行などを行います。問題を説明する最小限のコード サンプルを見つけようとしました。

kdbg ではサンプルは機能しますが、コマンド ラインから開始すると機能しないため、メッセージが表示されます。

0 投票する
2 に答える
350 参照

c - 内部で mmap を 1 回だけ呼び出す複数の malloc 呼び出し

以下のコードを試してみると、malloc api の内部呼び出しを明確に分析できません。システム コール mmap が 2 つ以上の malloc 呼び出しに対して 1 回だけ呼び出されることは明らかではありません。4069 バイト以上を割り当てている場合は、それも内部で 1 つの mmap のみを呼び出しています (トレースは strace -p processid を使用して識別されます)。

トレース出力:

私が探しているのは、mallocが複数回使用されている場合、メモリが4096を超える2つのmallocで超過しているため、複数のmmapを呼び出すことです

0 投票する
1 に答える
105 参照

assembly - ヒープサイズを変更できません AMD64

brk を変更してヒープ サイズを 100 増やしようとしていますが、コードが機能しない理由がわかりません。
これを実行しようとするコードの一部を次に示します。

x (print InicialHeap
)
x + 100 (print InicialHeap + 100)
x (print InicialHeap)
しかし、同じ結果 "x" を 3 回しか出力しません。
ヒープサイズを増やすにはどうすればよいですか?

0 投票する
0 に答える
173 参照

assembly - 32 ビット nasm アセンブリで sbrk を模倣する

こんにちは、私の 2 年目のコンピューター サイエンス プロジェクトでは、32 ビットの nasm アセンブリでガベージ コレクターを作成することを任されました。1つのことを除いて、すべてを正常に実行することができました。brk へのシステム コールを使用して、gclib sbrk 関数を模倣するとします。

ここに私の作業バージョンがあります:

sbrk を取り除くために、次のことを行いました。これにより、まったく別の機能でセグメンテーション違反が発生します。

abrk 関数は次のとおりです。

何が間違っているのかわかりません。講師に尋ねましたが、彼も間違いを見つけることができませんでした。

また、動作しないバージョンは私の大学の研究室のPCでは動作しましたが、私のものでは動作しませんでした.ubuntuのバージョンの違いが原因でしょうか? 助けてくれてありがとう。

0 投票する
0 に答える
573 参照

debugging - Strace は brk の呼び出しを検出しますが、GDB はブレークポイントで停止しません

私はかなり長い間メモリリークのデバッグを試みてきました。私の主な問題は、Valgrind などの適切なツールを使用できないことです。そのため、単純な GDB + strace に落ち着きました。

私のプログラムはループです。反復ごとに、いくつかのオブジェクトを作成し、それらのデストラクタを呼び出します。hereで説明されているように、ループの最初の反復での最初の割り当ての後、プログラムは常に同じオブジェクトを割り当てているため、常に同じスペースを再利用する必要があるため、より多くのメモリを要求するべきではありません。それでも、私のプログラムはbrk()15 回の反復ごとに呼び出し、渡される引数は毎回brk4.096 ずつ増加します (1 回目: brk(0xb7887000) = 0xb7887000、2 回目: brk(0xb7888000) = 0xb7888000、3 回目:brk(0xb7889000) = 0xb7889000など)。

次に、GDB を自分のプログラムにフックして、プログラムを数回実行し、brk にブレークポイントを設定してみました(gdb) break brk

アドレスにブレークポイントを設定すると表示されますが、プログラムを 15 回以上繰り返し実行しても、ブレークポイントが「呼び出される」ことはありません (?)。

なぜそれが起こっているのですか?どうすれば何が起こっているのか理解できますか?