私は、学校で使用するオンライン テスト サイトを構築した数学教師です (プロではありません)。このサイトはうまく機能していますが、学校での使用量が増えるにつれて、メモリの問題が発生し始めています (と思います)。約 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();
}