したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

雑談

165名無しさん:2009/04/14(火) 14:08:08 ID:wggBQV.o
別のスレッドの話題だけど自分は困ってないのでこっちに・・・

高負荷時のメモリリーク(に見える現象)って、昔から絶えない話題やねぇと思いつつ・・・
「高負荷で発生しやすい事」、と、「メモリ使用量が急に跳ね上がる事」から原因を推測し、ユーザ側で対処できる事があるか考えてみた・・・

ケース1:
受信量対して処理が追いつかずパケットの取りこぼしが発生した為、後続の可変長パケット処理で莫大なサイズのパケットを期待してしまっている。
(Supporter以外のプログラムがCPU時間を食いつぶしてしまっている場合)

この場合RO SupporterにCPU時間を多く割り振ることができれば解決もしくは発生率を緩和できる可能性があるかと・・・
つまり、余力のあるCPUに換装するとか、RoのCPU使用率を下げるとか、SupporterのCPU使用率を上げるとか・・・

 プログラム側で回避するのであれば、場当たり的だけど以下のようなガード処置が有効かも
  ・ありえないくらい大きなサイズの(可変長)パケットは破棄する。
   例として6Kbyteを超えるパケットサイズになると判断(つまり<len>.w > 6*1024の時)した場合、現在の受信バッファを破棄する。
  ・1回の受信量が <len>.w に対して十分小さい(たとえば1/8)サイズであるにもかかわらず1パケットの最終データでない場合現在の受信バッファを破棄する。
   (ただし、チャット等の受信パターンが<len>.wまでで一旦切れて送られてくるパケット等に特例措置を入れないといけないのでこの手は微妙なんだけど)
 もちろん、破棄してしまった結果情報のつながりがおかしくなって、表示バグ等が増えることが考えられるが・・・黙ってフリーズしてしまうよりはましかと

ケース2:
スレッド間の排他問題が原因で(バッファとか受信関係の)メモリ破壊している。(微妙なタイミングで低負荷時には発生しにくいとか?)

この場合、もちろん根本的にはプログラム側での対処が必要だが・・・シングルスレッドのCPUだと問題が発生し無くなる可能性も考えられる
実際にCPUスレッド数が2になるまで、見つかってなかったバグとかもよく目にするし・・・

以上、ほかにも原因が考えられると思うけど、たわごとと思って笑って流してくださいな


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板