質問するログイン新規登録

Q&A

1回答

329閲覧

[Julia]急にプロセスが止まる

akirayoshimura

総合スコア50

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Julia

Juliaとは、科学技術計算に特化した、高水準・高性能な動的プログラミング言語です。オープンソースとして公表されており、書き易く動きが早いことが特徴です。

0グッド

0クリップ

投稿2026/02/17 23:27

0

0

実現したいこと

メモリをたくさん使う機能を実行していると急にプロセスが止まります。
エラーではないのでどのように対応したらいいか分からず、もう一度動くようにしたいです。

発生している問題・分からないこと

Outofmemoryerrorとかではなくて単純に止まります。
頻繁に止まる場所は特定のループ処理の途中のことが多いです。厄介なのは同じ条件(開いているソフト、同じインプット)で実行してもループ処理の止まる場所は毎回違いますし、またループ処理を抜けて先の処理で止まるときもありますし、止まらない時もあります。
下記が頻繁にあるループ内で止まるときのログです。
generated 1270000 events | 08:09:51
generated 1280000 events | 08:09:51
generated 1290000 events | 08:09:51
generated 1300000 events | 08:09:51
↑ここで止まるみたいな感じです。

メモリ使用量は94~100%近く、cpu使用量は20%以下、ディスク使用料は1瞬だけ100%近くなりその後は数パーセントです。ハードフォルトは150とか200の時があります。

止まってから徐々にメモリとコミットが減っていき、放っておくと半分以下にまで減っていくことが分かっています。

エラーメッセージ

error

1エラーは出ずに単純にプロセスが止まるだけなので貼れません。

該当のソースコード

Julia

1# 上記で言及したループ処理です。 2 3events = Vector{NamedTuple{(:date, :type, :trade_idx, :invest, :code),Tuple{Date,Symbol,Int,Float64,String}}}() 4 5count_evt = 0 6 7for i in 1:n 8 code_str = string(df.code[i]) # code を文字列化(Int/String 両対応) 9 push!(events, (date=df.entry_date[i], type=:entry, trade_idx=i, invest=df.invest[i], code=code_str)) 10 push!(events, (date=df.exit_date[i], type=:exit, trade_idx=i, invest=df.invest[i], code=code_str)) 11 12 # debug 13 count_evt += 1 14 if count_evt % 10000 == 0 15 println("generated $count_evt events | $(Dates.format(Dates.now(), "HH:MM:SS"))") 16 end 17 # debug 18end

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果
  1. 検索
    teratailやgoogleで検索をしてみたのですが僕が探した日本語と英語の範疇では該当する問題に言及している記事を見つけられませんでした。やはりみんなエラーが出て止まっているようでエラーも出ずにプロセスが止まる事例が見つけられませんでした。

  2. ソースコードを自分なりに変更した
    そもそもこのコードは株の検証を行うのに使っているコードです。
    2022年からのデータ(約400万行DF)を使用すると止まることがなく完遂できるんですが2011年からのデータ(約1400万行DF)を使うと止まります。
    このことからメモリ圧迫が原因かと思い使用するDFを1400万行DF->1200万行に圧縮するように変更しました。結果として変わらずとまります。

  3. ChatGptと会話しながら原因究明
    いろいろなケースを考えてchatgptとコードを共有しながら確認を1日しましたが結局なぜそれが起こるのかわかりませんでした。

補足

  • リストJuliaは最新のJulia Version 1.12.5です。
  • スレッド競合がエラーかと思い1スレッドで実行しましたが同じく止まります。
  • GCのタイミングで止まったのかと思いGC.enable_logging(true)を入れてみたのですが止まったタイミングではログは出ていませんでした。
  • このエラーが起きるようになる前に1度パソコンがクラッシュしています、多分処理をさせ過ぎて落ちたんだと思います。それ以降止まるようになったのでセーフティーがかかったのかとも思ったのですが自分で変更したわけではないですし、該当しそうなものは見つかりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

MasahikoHirata

2026/02/18 02:08

ソースを見る限りですが、メモリーの確保と解放で時間が掛かって止まっている様に見えます。 それは'push!'の部分などです。 必要ならリファクタリングしたソースを記載しますが。
melian

2026/02/18 02:32

Google の AI モードで調べてみました。ご参考までにどうぞ。 https://x.gd/wQQYP > メモリ使用量は94~100%近く、... 止まってから徐々にメモリとコミットが減っていき〜 Linux OS であれば OOM(Out of Memory) killer が自動的に当該プロセスを強制終了(sigkill)させる様な状況ですが、Windows での挙動については判りませんね。。。 > 2022年からのデータ(約400万行DF)を使用すると止まることがなく完遂できるんですが2011年からのデータ(約1400万行DF)を使うと止まります。 過去の全てのデータを対象にして処理する必要がなければ、2011年からのデータを分割して(例えば一年ごとなど)処理してみてはどうでしょうか。
guest

回答1

0

勉強不足でJuliaというプログラミング言語を知らなかったのですが、ソースを見ると明らかに推測できることがあります。
どの言語でも動的配列にデータを追加すると、実データ以上にメモリーを食います。
この場合は、Vectorにpushですね。それを1ループに2回、1400万ループしようとして、130万ループで止まる感じでしょうか。

ここの説明がわかりやすいです。
Julia - 配列の実装について

具体的な回答でなくて申し訳ないですが、データの持ち方や追加の方法について、再検討してみてください。

投稿2026/02/18 14:24

hiroki-o

総合スコア1758

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問