みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になっております。
Window Server 2022 Standard
FileMaker Server 20.1.2.207
FileMaker Pro 20.1.2.204 です。
以下のようなスクリプトを、ユーザーがスイッチを操作するまでLoopさせています。
Loop
Exit Loop If ~~~~ユーザーがOFF指示~~~~
Loop
変数を設定 [$Run1; 値: $Run1 + 1 ]
~~~~処理10回程度~~~~~
Exit Loop If
End Loop
変数を設定 [$Run1; 値: ""]
Loop
変数を設定 [$Run2; 値: $Run2 + 1 ]
~~~~処理10回程度~~~~~
Exit Loop If
End Loop
変数を設定 [$Run2; 値: ""]
End Loop
たまに異常(スクリプトは止まっていないが動いていない)が起きており、原因を調べておりましたところ以下のような公式の技術仕様を見つけました。
総計 50,000 再帰呼び出し コールスタックにおいては、どのポイントでも 10,000 コールまで掘り下げることができます。この限界を超えると、カスタム関数は、"?" を返します。 テール再帰は、テールコールによってコールスタックのサイズが大きくならないように適切に最適化されます。
・・・書いてあることがよく分かりません。上記のようなスクリプトだと制限に引っかかり止まる可能性がありますでしょうか。
よろしくお願いいたします。
Offline
それは計算式の話なので、スクリプトとは関係ありません。
処理内容がわからないので何とも言えませんが、
Exit Loop If
に条件がありませんから無限ループになっている?
カウントアップした変数も何もせずにクリアしてますし。
「動いてない」のはどうやって確認するのですか?
himadanee 様
ありがとうございます。
分かり辛く申し訳ございません。
処理内容はかなり端折っており、Exit Loop Ifにも条件があり、
この全体のLoopや、中の各Loop処理毎にログを取っています。
そのログが途中で止まっており、それ以降作成されていない(Loop内の各処理も動いていない)ので
Loopの制限に達した可能性を疑っていました。
関係ないとのことで別の線を探ります。
Offline
そこの記述は確かに関係ないのですが、考えてみたら「スクリプト実行」を元のスクリプトに戻らずに繰り返したら同様の制限(スタック数)に引っ掛かる可能性はあるような?
そんなことは試したこともなかったし、多分そちらでもやってないと思いますけど、念のため。
引っ掛かればエラーで止まるでしょうから、問題の現象とは関係ないし。
loop そのものは、例えば100000レコードに同じ処理をくりかえすなどはたまに行いますが、普通に終了します。
問題なのは再帰です。再帰は、コールスタック(一時的にスクリプトの途中経過を保存しておくモノ、と思われるといいでしょう)が10000段が限度、ということですので、例えば、カスタム関数の中で(直接、間接を問わず)自分を呼び出している、スクリプトで自分を呼び出している、という再帰で問題になります。
上のスクリプトでは再帰はなさそうですので、関係無いと思います。
全体を見ないとわかりませんが、loop 内の処理そのものに問題があるのでは。
Offline
himadanee 様
Shin 様
いつもありがとうございます。
まだ完全に再帰を理解できていませんが、再帰は行っていないと思います。
ユーザーがスクリプト実行 → その中で上記のLoop サーバースクリプトを実行。これが停止指示があるまでLoopしています。
他の原因を探っておりますが、Loopの中でcURLを使って外部通信を行っており
その際にインターネットが断線していることが可能性として上がってきました。
cURL転送はデフォルトのタイムアウトが設定されていない(タイムアウトしない)とのことで、ここに制限を付け様子を見てみようと思っております。
https://curl.se/libcurl/c/CURLOPT_TIMEOUT.html
タイトルと話が逸れてしまい申し訳ございません。
Offline
使えるオプションでは、
--connect-timeout <fractional seconds>
-m, --max-time <fractional seconds>
で対処するしかないかも。
MBS プラグインでしたら、timeout はサポートされています。
Offline
Shin 様
ありがとうございます。
いただきました情報で設定し、様子を見てみたいと思います。
Offline
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 517.12 KiB (Peak: 522.02 KiB) ]