Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ジャッジのメモリに関する不具合修正 #129

Merged
merged 1 commit into from
Dec 3, 2023

Conversation

ocha98
Copy link
Contributor

@ocha98 ocha98 commented Nov 25, 2023

問題点

[1] メモリ制限が256MBになっている

judge.goで設定されているメモリ制限が262144KiB(256 MiB)となっています。問題ページにはメモリは1024MBとあるのでジャッジと差があります。

[2] メモリ制限を超えてもAC判定となる

プログラム実行時に実行エラーがでなければメモリ使用量の検証が行われないためACの判定が出る場合があります。

以下の提出ではメモリ使用量は1502MBであるのにも関わらずACが出ます。

提出リンク

また、ulimit-mは物理メモリの使用量制限のためスワップが含まれません。

解決策

judge.goで設定されているメモリ制限を1024 MiBに変更しました。

終了ステータスに関わらずメモリ使用量を確認するように変更しました。

ulimitでのメモリ制限を-mから-vへ変更しました。-vはバーチャルメモリ制限であり、物理メモリ+スワップメモリで計算されます。

また、メモリ制限は5MiBほど余裕を持たせて制限するようにしていますが、終了ステータスに関わらず使用量を確認するため問題ありません。

`judge.go`
メモリ制限を262144から1024*1024へ変更

`run.go`
`ulimit`のメモリ制限を`-m`から`-v`へ変更
終了ステータスに関わらず`TLE`、`MLE`を判定
@makutamoto
Copy link
Owner

土日に処理します!

@makutamoto makutamoto merged commit 68dfbcf into makutamoto:master Dec 3, 2023
@makutamoto
Copy link
Owner

@ocha98
Copy link
Contributor Author

ocha98 commented Dec 3, 2023

REになるのは正常です。なぜなら大規模のメモリを確保を行おうとしてそれに失敗するからです。確保に失敗するだけなので実際にメモリは使用されないため実行結果のメモリ使用量も小さくなっています。

もともとはスワップ領域が無制限のため実質的にメモリ制限も無制限になっていたのですが、それを-vオプションに変更することで阻止しました。

@makutamoto
Copy link
Owner

承知しました.実際マージしてみておかしなところはなさそうですか?

@ocha98
Copy link
Contributor Author

ocha98 commented Dec 3, 2023

なさそうです!
もし見つかった場合はまたプルリクを送ります!

@makutamoto
Copy link
Owner

いつもPRありがとうございます!

@ocha98 ocha98 deleted the fix-memory-judge branch January 8, 2024 03:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants