0

openvms システムで 32 ビット perl を使用しています (したがって、perl は最大 2 GB の仮想アドレス空間にアクセスできます)。

「メモリ不足です!」と打っています。大きな perl スクリプトで。これを引き起こしている変数の場所に焦点を合わせました。しかし、devel:size を使用したテストの後、配列は 13 Mb のメモリしか使用しておらず、ハッシュはそれよりもはるかに少ないメモリしか使用していないことがわかりました。

私の質問は、VMS でこの perl スクリプトをプロファイリングするメモリについてです。

VMS でメモリ プロファイルを行う良い方法はありますか?

size を使用して、配列とハッシュのサイズを取得しました (配列はローカル スコープで、ハッシュはグローバル スコープです)。

DV Z01 A4:[INTRO_DIR]$ perl  scanner_SCANDIR.PL


Directory is Z3:[new_dir]
13399796 is total on array
3475702 is total on hash


Directory is Z3:[new_dir.subdir]
2506647 is total on array
4055817 is total on hash


Directory is Z3:[new_dir.subdir.OBJECT]
5704387 is total on array
6040449 is total on hash


Directory is Z3:[new_dir.subdir.XFET]
1585226 is total on array
6390119 is total on hash


Directory is Z3:[new_dir.subdir.1]
3527966 is total on array
7426150 is total on hash


Directory is Z3:[new_dir.subdir.2]
1698678 is total on array
7777489 is total on hash
4

1 に答える 1

2

(編集: Pmis-spelled GFLQUOTA ) その出力はどこから来ているのですか? OpenVMS 関係者には、ディレクトリ内のファイルが提案されますが、コードが吸い込む可能性があるのはどれですか? 通常、保存される要素ごとにかなりの malloc/align オーバーヘッドが発生します。

いずれにせよ、OpenVMS で厳密に 32 個のポインタを使用する場合に使用可能な ADDRESSABLE メモリは 1GB です: 0x0 .. 0x3fffffff であり、プログラム用で 2GB ではなく、'P0' スペースの (malloc) データです。P1 (0x7fffffff .. 0x4000000) には、スレッド ローカル スタック ストレージ用のスペースもありますが、perl はそれを (あまり) 使用しません。2 番目のセッションから、DCL でそれを見ることができます。

$ pid = "xxxxxxxx"
$ write sys$output f$getjpi(pid,"FREP0VA"), " ", f$getjpi(pid,"FREP1VA")
$ write sys$output f$getjpi(pid,"PPGCNT"), " ", f$getjpi(pid,"GPGCNT")
$ write sys$output f$getjpi(pid,"PGFLQUOTA")

ただし...これらは単なるアドレス範囲であり、プロセスが使用できるメモリの量ではありません。これは、プロセス page-file-quota によって管理されます。perl を実行する前に、$ SHOW PROC/QUOTA で確認してください。また、その使用状況は、上記のように非公開ページとグループ共有ページを追加して、外部から上記のように報告できます。

メモリ (およびその他のクォータ) を確認するもう 1 つの良い方法は、SHOW PROC/CONT ... を押してから "q" を押すことです。

では、それぞれの大きなアクティブ配列にはいくつの要素が格納されているでしょうか? 16 バイトに切り上げた平均的な要素の大きさは? ハッシュ要素はいくつ?キー + 値の平均の大きさ (切り上げは多めに)

正確なメッセージは何ですか?

プログラムはすぐに「爆破」しますか、それともしばらくしてからですか (SHOW PROC/CONT を使用できるように)

機能するソース ファイル データ セット (サイズ) はありますか?

乾杯、ハイン。

于 2014-04-29T11:35:14.717 に答える