AWS上のPHPスクリプトは、100%ではなく5%で実行されます


0

以下のPHPスクリプトは現在、インスタンスストレージとMySQL用SSDマウントを備えたc3.large EC2インスタンスでホストされています。スクリプトが読み取るファイルは、インスタンスストレージデバイスの1つにあります。

スクリプトが最初に開始されたとき、予想どおり100%で実行されますが、数時間後、スクリプトは約5%まで遅くなり、最終的にMySQLのクロールへの挿入が遅くなります。

このプロセスを遅くするものについてのアイデアはありますか?おそらくIOPSの問題ですか?

$handle = fopen(TMP . 'zones/' . $destinationFile, 'r');
if ($handle) {
    $x = 0;
    $origin = '';
    while (($line = fgets($handle)) !== false) {
        $x = $x + 1;
        $line = str_replace("\r", '', $line);
        $line = str_replace("\n", '', $line);
        if ($x > 61) {
            $record = explode(' ', $line);
            switch ($record[1]) {
                case 'NS':
                    $domain = $record[0];
                    $nameserver = rtrim($record[2], '.');
                    if ($record[2] == $nameserver) {
                        $nameserver = $nameserver . '.' . $origin;
                    }
                    $domainId = $this->addDomain($domain, $origin);
                    $nameserverId = $this->addNameserver($nameserver);
                    $dnId = $this->addDomainNameserver($domainId, $nameserverId);
                    break;
                case 'A':
                    echo 'Nameserver IP: ' . $record[2];
                    break;
            }
        } else {
            if (strpos($line, '$ORIGIN') > -1) {
                $origin = str_replace('$ORIGIN ', '', $line);
                $origin = rtrim($origin, '.');
            }
        }
    }
    fclose($handle);
}

十分なメモリがありますか?使用中のスワップはありますか?'free -m'
ヤロスラフクセラ

メモリ:合計3855804k、使用済み3751244k、104560k無料、221980kバッファスワップ:合計0k、使用0k、空き0k、3170028kキャッシュ
ジェフリーL.ロバーツ

十分な空きメモリですか、それともスワップを追加する必要がありますか?
ジェフリーL.ロバーツ

回答:


0

StackOverflowでより良い質問をします... MySQLの挿入について言及していますが、質問にSQLコードが表示されません。通常、データベースに大量のデータを挿入する場合:

1)行ごとに1つの要求を行うことはありません。2)時々COMMITします。それ以外の場合、DBはすべてのデータを一時バッファーに保持する必要があります。3)しかし、これは高価なので、すべての行に対してコミットするわけではありません。通常、数千行のバッチでデータを入力します。

また、MySQLと他のDBMSには、ファイルから大きなテーブルを取り込む方法があり(LOAD DATASQLまたはmysqlimportコマンドを参照)、スクリプトがその中間ファイルを作成し、MySQLを呼び出して一度にロードできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.