1

私は、学校で使用するオンライン テスト サイトを構築した数学教師です (プロではありません)。このサイトはうまく機能していますが、学校での使用量が増えるにつれて、メモリの問題が発生し始めています (と思います)。約 50 から 60 人のユーザーがサイトを同時に使用すると、Web サイト全体がクラッシュし始めますが、数分後に元に戻ります。使用率が低いと、この問題が発生することはありません。生徒がクイズを受けるページには、ページに 10 の質問が読み込まれ、各質問には 4 つのラジオ オプションを含む複数の選択肢があります。(多くのjqueryが行われているわけではありません)。ユーザーが回答をクリックするたびに、私は ajax を使用して回答をデータベースに保存しています。以下は、クイズを受けるときにクリックを送信する jquery コードです。

$('input:radio').click(function(){
var questionId = $(this).parent().parent().find('.qid').val();
var answer = $(this).val();
$.ajax({
        type: "POST",
        url: "insertqanswerajax.php",
        data: {questionId: questionId, answer: answer},
    });

});

cpanel でシステム プロセスをロードすると、それぞれ約 80 メガバイトの 5 つの異なるプロセスが実行されていることがわかります。私のphp.iniの最大値は540MBに設定されています。memory_get_peak_usage() でページを確認すると、約 0.5 メガバイトを超えることはありませんが、コンソールのタイムラインで、1 人のユーザーのメモリ使用量が最大 10 メガバイトであることがわかります (下の画像)。何を確認する必要がありますか、または不一致をトラブルシューティングする最善の方法は何ですか? 問題の原因は何ですか? 必要に応じてさらに情報を提供できますが、何が関連しているのかわかりません。

ご協力いただきありがとうございます。

ajax経由でアクセスするphpファイルのコードは次のとおりです

<?php session_start();
include('../includes/startup.php');
$questionId = $_POST['questionId'];
$answer = $_POST['answer'];



insertQuizAnswer($questionId, $userId, $answer, 1);


?> 

そのファイルで呼び出される関数:

function insertQuizAnswer($questionId, $userId, $answer, $testId){
global $DB;                                          
$standardsHandle = $DB->prepare("INSERT INTO quizanswers (questionid, userid,answer,testid)    
VALUES (:questionId,:userId, :answer, :testId)
                                ");   
$standardsHandle->bindParam(':questionId', $questionId);
$standardsHandle->bindParam(':userId', $userId);
$standardsHandle->bindParam(':answer', $answer);
$standardsHandle->bindParam(':testId', $testId);
$standardsHandle->execute();    
}

そして、両方にロードされた起動ファイル:

<?php
if(preg_match('/(?i)msie [2-7]/',$_SERVER['HTTP_USER_AGENT']))
{
// if IE < 8
echo "My Class Progress does not Work with this version of Internet Explorer</br>
<a href='https://www.google.com/intl/en/chrome/browser/'>Click Here to Download a more modern browser</a>";
exit;
}
else
{

}
if(isset($_POST['getGrade'])){
$_SESSION['gradeLevel'] = $_POST['getGrade'];
}
if(isset($_POST['getSubject'])){
$_SESSION['subject'] = $_POST['getSubject'];
}
include_once('../functions/userfunctions.php');   //all functions
include_once('../functions/goalfunctions.php');   //all functions
include_once('../functions/modulefunctions.php');   //all functions
include_once('../functions/globalfunctions.php');   //all functions
include_once('../functions/skillfunctions.php');   //all functions
include_once('../functions/quizfunctions.php');   //all functions
include_once('../functions/practicefunctions.php');   //all functions
include_once('../functions/benchmarkfunctions.php');   //all functions
include_once('../functions/dockfunctions.php');   //all functions
include_once('../functions/dashboardfunctions.php');   //all functions
include_once('../functions/notificationfunctions.php');   //all functions
include_once('../includes/connect.php');     //connect to database
$userSubject = $_SESSION['subject'];
$userGradeLevel = $_SESSION['gradeLevel'];
$userId = $_SESSION['userId'];
if ($_SESSION['loggedIn'] == 'true'){
}   
    else{
    header('location: ../../index.php');
    die();
    }

?>

アクセスされる connect.php ファイルは次のとおりです。

try {                                                                                 
$DB = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);   
}

catch(PDOException $e) {      
 echo $e->getMessage();
}

ここに画像の説明を入力

ここに画像の説明を入力

4

1 に答える 1

0

使用されるメモリ量は、ini_set('memory_limit'); に依存します。この量は Apache によって予約されており、メモリが不足するまでスクリプトが実際にどれだけ使用するかは問題ではありません。

于 2013-11-14T23:22:15.960 に答える