戰(zhàn)指南:從部署到性能優(yōu)化的完整避坑手冊(cè))
簡(jiǎn)介《Moodle管理實(shí)戰(zhàn)指南》是一份面向教育機(jī)構(gòu)IT人員、專業(yè)Moodle管理員及培訓(xùn)技術(shù)支持的PDF電子書系統(tǒng)講解Moodle 3平臺(tái)從環(huán)境準(zhǔn)備到日常運(yùn)維的完整知識(shí)體系內(nèi)容涵蓋基礎(chǔ)配置、用戶管理、權(quán)限控制、數(shù)據(jù)保護(hù)、備份策略、安全防護(hù)、插件擴(kuò)展、主題設(shè)計(jì)、移動(dòng)集成與網(wǎng)絡(luò)服務(wù)等核心模塊可幫助讀者構(gòu)建穩(wěn)定、安全且可擴(kuò)展的在線學(xué)習(xí)環(huán)境。資源包為單個(gè)PDF文件大小42.73MB作者Alex Büchner是經(jīng)驗(yàn)豐富的Moodle專家書中收錄大量操作步驟、配置案例與最佳實(shí)踐并提供中文翻譯便于國(guó)內(nèi)讀者按主題查閱。全書先介紹系統(tǒng)要求與安裝流程再深入安全管理闡述如何運(yùn)用各類安全模塊抵御威脅并保障數(shù)據(jù)完整隨后轉(zhuǎn)向平臺(tái)自定義講解通過插件增強(qiáng)功能、通過主題改善界面體驗(yàn)以及借助移動(dòng)集成和網(wǎng)絡(luò)服務(wù)支持遠(yuǎn)程教學(xué)最后還針對(duì)常見故障給出排查建議與社區(qū)資源獲取途徑兼顧新手入門和資深管理員提升。已有1279人學(xué)習(xí)下載適合希望系統(tǒng)掌握Moodle運(yùn)維、優(yōu)化教學(xué)平臺(tái)性能與用戶體驗(yàn)的教育技術(shù)從業(yè)者。1. Moodle管理實(shí)戰(zhàn)指南掛掉之前你必須知道的事Moodle是開源學(xué)習(xí)管理系統(tǒng)里使用最廣的一套高校、職業(yè)培訓(xùn)和企業(yè)的內(nèi)部培訓(xùn)平臺(tái)很多都跑在它上面。但多數(shù)團(tuán)隊(duì)的處境是部署時(shí)有工程師盯著運(yùn)營(yíng)后只剩一個(gè)運(yùn)維兼職等用戶量上來才暴露問題——登錄慢、備份失敗、升級(jí)卡在插件兼容性上。這篇Moodle管理實(shí)戰(zhàn)指南不是把官方文檔翻一遍而是把從部署、日常維護(hù)到性能排查的路徑講清楚。內(nèi)容圍繞真實(shí)運(yùn)維里反復(fù)出現(xiàn)的場(chǎng)景服務(wù)器怎么選、用戶和課程怎么批量管、升級(jí)備份怎么做才不會(huì)翻車。新手可以照著步驟走熟手可以撿回那些容易忽略的邊界參數(shù)。2. 從架構(gòu)到落地選型、安裝與初始化配置Moodle本身并不挑服務(wù)器真正挑的是并發(fā)量和存儲(chǔ)。官方文檔給出的最低配置只夠跑通演示環(huán)境放到生產(chǎn)里登錄請(qǐng)求一多PHP進(jìn)程數(shù)一漲內(nèi)存最先告急。所以第二章先解決部署層的選型和初始化問題這一層決定后面日常運(yùn)維的難度。2.1 服務(wù)器與軟件棧選型先看用戶量再看功能表Moodle的性能瓶頸通常不在CPU而在內(nèi)存和磁盤I/O。一次頁面請(qǐng)求要加載幾十個(gè)PHP文件背后還有多次數(shù)據(jù)庫查詢和會(huì)話讀寫。并發(fā)起來以后磁盤I/O排隊(duì)時(shí)間會(huì)直接體現(xiàn)到頁面響應(yīng)上。我一般先按在線人數(shù)倒推容量再考慮CPU核數(shù)。規(guī)模CPU內(nèi)存存儲(chǔ)參考并發(fā)500人以下2核4-8GB普通SSD50GB秒級(jí)響應(yīng)2000人左右4核16GBSSD100GB高峰200在線10000人以上8-16核32-64GBNVMe500GB起需配合緩存和讀寫分離表格里的數(shù)字不是死標(biāo)準(zhǔn)但方向很明確先保證內(nèi)存不換頁再談優(yōu)化。存儲(chǔ)上課程視頻和用戶上傳文件會(huì)快速吃掉磁盤擴(kuò)容的順序永遠(yuǎn)是磁盤優(yōu)先于CPU。軟件棧方面Apache加MariaDB是Moodle官方測(cè)試最多的組合兼容性問題最少。Nginx加PHP-FPM在高并發(fā)下更省內(nèi)存但URL重寫、文件權(quán)限這些細(xì)節(jié)要自己盯。我通常建議第一次搭建就選Apache跑穩(wěn)定后再評(píng)估是否遷移。PHP版本按官網(wǎng)要求走。需要特別注意的是PHP擴(kuò)展缺curl會(huì)導(dǎo)致大量聯(lián)網(wǎng)插件直接報(bào)錯(cuò)缺intl會(huì)導(dǎo)致多語言和日歷異常缺zip會(huì)導(dǎo)致課程備份無法導(dǎo)出。安裝完以后可以用一行命令核對(duì)關(guān)鍵擴(kuò)展php -m | grep -E curl|intl|mbstring|zip|gd|xml邏輯說明grep命令把PHP已加載的擴(kuò)展過濾出來逐項(xiàng)對(duì)照缺哪個(gè)補(bǔ)哪個(gè)。參數(shù)說明gd擴(kuò)展影響圖片處理和驗(yàn)證碼顯示上傳課程封面顯示異常時(shí)先檢查它。2.2 最小可用安裝LAMP環(huán)境下的初始化步驟以我常用的部署路徑為例包管理安裝軟件Moodle源碼放網(wǎng)站目錄數(shù)據(jù)目錄單獨(dú)建# 安裝Web、數(shù)據(jù)庫和PHP發(fā)行版包名略有差異 apt install -y apache2 mariadb-server \ php php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip php-mysql # 下載Moodle源碼并解壓版本號(hào)按官網(wǎng)當(dāng)前穩(wěn)定版替換 mkdir -p /var/www tar -xzf moodle-latest.tgz -C /var/www/ # 數(shù)據(jù)目錄獨(dú)立于代碼目錄權(quán)限只給Web服務(wù)用戶 mkdir /var/moodledata chown -R www-data:www-data /var/www/moodle /var/moodledata chmod 700 /var/moodledata邏輯說明命令做的三件事——裝全軟件棧、解壓源碼、建數(shù)據(jù)目錄。關(guān)鍵點(diǎn)是數(shù)據(jù)目錄權(quán)限700意味著只有屬主能進(jìn)避免課程文件被Web服務(wù)直接下載。參數(shù)說明www-data是Apache默認(rèn)運(yùn)行用戶如果用PHP-FPM要把屬主改成php-fpm的運(yùn)行用戶否則報(bào)權(quán)限錯(cuò)誤。數(shù)據(jù)庫側(cè)不建議用root賬號(hào)連接Moodle單獨(dú)建一個(gè)庫和賬號(hào)更干凈CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER moodleuserlocalhost IDENTIFIED BY 強(qiáng)密碼; GRANT ALL PRIVILEGES ON moodle.* TO moodleuserlocalhost; FLUSH PRIVILEGES;邏輯說明utf8mb4是為了課程內(nèi)容里的emoji和特殊字符能正常存取。參數(shù)說明字符集選錯(cuò)的后遺癥是頁面出現(xiàn)亂碼而遷移時(shí)改字符集非常麻煩初始化這一步不要省。瀏覽器打開站點(diǎn)地址按向?qū)顢?shù)據(jù)庫信息安裝向?qū)?huì)生成config.php。裝完后進(jìn)入config.php確認(rèn)幾項(xiàng)關(guān)鍵參數(shù)。2.3 config.php里值得手工調(diào)整的幾個(gè)參數(shù)安裝向?qū)傻腸onfig.php能跑但不一定適合你的實(shí)際環(huán)境。以下參數(shù)每次部署我都會(huì)復(fù)查// config.php中的關(guān)鍵配置按當(dāng)前環(huán)境調(diào)整 $CFG-wwwroot https://lms.example.org; // 必須與瀏覽器訪問地址完全一致 $CFG-dataroot /var/moodledata; // 數(shù)據(jù)目錄路徑勿放在Web目錄內(nèi) $CFG-directorypermissions 02777; // 多人協(xié)寫文件時(shí)需要的目錄權(quán)限 $CFG-debug 0; // 生產(chǎn)環(huán)境必須關(guān)閉調(diào)試 $CFG-debugdisplay 0; // 禁止調(diào)試信息輸出到頁面 $CFG-langlist zh_cn,en; // 只保留常用語言包 $CFG-cachejs false; // 改前端資源時(shí)臨時(shí)關(guān)閉線上保持true $CFG-cachetemplates false; // 改模板時(shí)臨時(shí)關(guān)閉作用同上邏輯說明debug和debugdisplay是生產(chǎn)環(huán)境最容易忽略的安全開關(guān)開啟時(shí)數(shù)據(jù)庫報(bào)錯(cuò)路徑會(huì)直接暴露給訪問者。參數(shù)說明langlist限制語言包后語言菜單更干凈也減少磁盤和翻譯加載開銷cachejs只在前端調(diào)試時(shí)關(guān)掉平時(shí)開著省帶寬。配套的PHP上傳參數(shù)也在這里統(tǒng)一調(diào)整。默認(rèn)2M上傳限制在課程視頻場(chǎng)景下會(huì)被頻繁觸發(fā)現(xiàn)象是用戶上傳文件后提示“文件過大”但問題不在Moodle側(cè); php.ini中的上傳與執(zhí)行限制 upload_max_filesize 64M post_max_size 128M max_execution_time 600 memory_limit 256M邏輯說明post_max_size必須大于upload_max_filesize否則大文件上傳會(huì)在請(qǐng)求體解析階段被拒絕。參數(shù)說明memory_limit給到256M是為了處理大文件導(dǎo)入和課程備份解壓再往上調(diào)收益有限反而占用更多內(nèi)存。3. 日常管理用戶、角色與課程創(chuàng)建的工作流部署完成后日常工作量最大的三件事就是用戶、角色和課程。這三件事處理順手后面運(yùn)維會(huì)輕松很多處理不順每個(gè)學(xué)期開學(xué)前都是災(zāi)難。3.1 用戶批量導(dǎo)入與認(rèn)證方式選擇小平臺(tái)手動(dòng)添加用戶沒問題幾百人以上就必須有批量導(dǎo)入思維。先把用戶數(shù)據(jù)整理成CSV再通過后臺(tái)或命令導(dǎo)入username,password,firstname,lastname,email,cohort1,role1 zhangsan,InitPass2024,張,三,zhangsanexample.com,2023級(jí),student lisi,InitPass2024,李,四,lisiexample.com,2023級(jí),student處理CSV時(shí)注意保存為UTF-8格式否則中文姓名會(huì)亂碼。CSV列名是Moodle固定的字段名username、password、firstname、lastname、email、cohort1、role1不能自定義。cohort1表示用戶加入的 cohort群組role1表示在這個(gè)上下文里的角色。命令行導(dǎo)入適合放到自動(dòng)腳本里重復(fù)執(zhí)行php admin/cli/import.php --file/path/users.csv --formatcsv邏輯說明import.php是Moodle自帶的命令行導(dǎo)入腳本支持csv格式批量導(dǎo)入用戶和選課關(guān)系。參數(shù)說明--file指CSV路徑--format指定解析格式。導(dǎo)入前建議先跑一遍--dry-run模擬確認(rèn)無誤后再真正導(dǎo)入。用戶量大且人員流動(dòng)頻繁的機(jī)構(gòu)建議對(duì)接統(tǒng)一身份認(rèn)證。對(duì)接不只是換個(gè)認(rèn)證插件要把字段映射關(guān)系、密碼同步策略、管理員權(quán)限邊界逐條理清否則上線后查問題會(huì)非常痛苦。3.2 角色與權(quán)限權(quán)限最小化是管理紀(jì)律Moodle的角色配置很靈活正因?yàn)殪`活很容易被改壞。最常見的翻車場(chǎng)景是把“課程創(chuàng)建者”直接給老師結(jié)果老師能瀏覽全站所有課程的學(xué)生列表。角色默認(rèn)能力范圍生產(chǎn)環(huán)境建議管理員全站設(shè)置與課程數(shù)據(jù)只保留1-2人其余管理員降級(jí)課程創(chuàng)建者創(chuàng)建課程并主導(dǎo)教師身份給教務(wù)負(fù)責(zé)人不給普通老師編輯教師在自己課程內(nèi)管理內(nèi)容與學(xué)生教師默認(rèn)角色非編輯教師只能評(píng)分和查看外聘教師、助教使用學(xué)生查看課程、提交作業(yè)默認(rèn)角色角色表只是起點(diǎn)實(shí)際使用中要根據(jù)業(yè)務(wù)做覆蓋和調(diào)整。一個(gè)常見場(chǎng)景允許教師查看自己課程的成績(jī)單但不允許導(dǎo)出全站用戶列表。這時(shí)不要直接改“課程創(chuàng)建者”權(quán)限而應(yīng)該新建一個(gè)自定義角色只勾選需要的權(quán)限項(xiàng)。自定義角色的位置在“站點(diǎn)管理 → 用戶 → 權(quán)限 → 定義角色”。復(fù)制一份“編輯教師”再減權(quán)限比從零建角色快得多。3.3 課程分類與批量建課不要讓課程變成雜草堆課程分類建議控制在兩層以內(nèi)。分類層級(jí)太深導(dǎo)航路徑長(zhǎng)學(xué)生找課難教師排課也容易放錯(cuò)位置。比較穩(wěn)妥的結(jié)構(gòu)是“學(xué)院/部門”做一級(jí)“學(xué)期/班級(jí)”做二級(jí)。批量建課用后臺(tái)的上傳課程功能支持CSV字段示例shortname,fullname,category,summary,visible CS101,計(jì)算機(jī)導(dǎo)論,基礎(chǔ)課程,面向新生的入門課,1 CS102,數(shù)據(jù)結(jié)構(gòu),基礎(chǔ)課程,含實(shí)驗(yàn)環(huán)節(jié),1shortname是課程短名生成URL和顯示列表用建議用統(tǒng)一編號(hào)規(guī)則fullname是課程完整名稱顯示在課程頁面頂部category對(duì)應(yīng)后臺(tái)已建好的分類visible控制是否對(duì)學(xué)生可見。批量創(chuàng)建完成后把課程分類的“課程創(chuàng)建者”角色分給各教學(xué)秘書讓他們自己維護(hù)負(fù)責(zé)范圍內(nèi)的課程信息管理員只保留審計(jì)權(quán)限。這樣既分散工作又避免管理員成為所有課程的老師。4. Moodle管理避坑指南備份、升級(jí)與安全加固這一章是運(yùn)維層面真正拉開差距的部分。前面三章解決的是能不能用的問題備份、升級(jí)和安全解決的則是出問題時(shí)能不能救回來的問題。以下踩坑記錄都是實(shí)戰(zhàn)中反復(fù)出現(xiàn)的按“現(xiàn)象-原因-解決”寫清楚。4.1 備份順序錯(cuò)了恢復(fù)出來的平臺(tái)是半殘的現(xiàn)象恢復(fù)備份后課程頁面能打開但課程里的圖片、作業(yè)附件全部加載失敗頁面顯示一堆破損文件圖標(biāo)。原因數(shù)據(jù)庫和數(shù)據(jù)目錄不是同一時(shí)間點(diǎn)備份的?;謴?fù)時(shí)數(shù)據(jù)庫指向了用戶上傳文件的新路徑但數(shù)據(jù)目錄里沒有對(duì)應(yīng)的文件。常見做法是把兩個(gè)備份分別定時(shí)執(zhí)行中間隔著數(shù)小時(shí)必然出問題。解決備份必須按代碼、數(shù)據(jù)目錄、數(shù)據(jù)庫三個(gè)層面做且數(shù)據(jù)庫備份要在數(shù)據(jù)目錄備份之后執(zhí)行。先打包數(shù)據(jù)目錄再用mysqldump導(dǎo)出數(shù)據(jù)庫恢復(fù)時(shí)以數(shù)據(jù)庫的時(shí)間點(diǎn)為基準(zhǔn)文件一定存在# 數(shù)據(jù)目錄先打包數(shù)據(jù)庫后導(dǎo)出保持時(shí)間一致性 tar -czf /backup/moodledata_$(date %F).tar.gz /var/moodledata mysqldump -u moodleuser -p --single-transaction --routines --triggers moodle \ /backup/moodle_db_$(date %F).sql邏輯說明--single-transaction保證導(dǎo)出過程中不鎖表在線備份不會(huì)影響正在上課的用戶。參數(shù)說明--routines和--triggers用于導(dǎo)出存儲(chǔ)過程和觸發(fā)器沒有自定義函數(shù)時(shí)可以省略加上無害。恢復(fù)時(shí)先解壓數(shù)據(jù)目錄再導(dǎo)入數(shù)據(jù)庫順序反過來會(huì)報(bào)一堆外鍵錯(cuò)誤。4.2 升級(jí)最怕跨多版本和改過源碼現(xiàn)象升級(jí)頁面一片白或者升級(jí)完成后某個(gè)課程格式插件報(bào)錯(cuò)課程打不開。原因跨了多個(gè)大版本數(shù)據(jù)表結(jié)構(gòu)和插件API變化太大數(shù)據(jù)庫升級(jí)腳本跑到一半報(bào)錯(cuò)或者之前為了臨時(shí)改需求直接改過Moodle源碼升級(jí)后改動(dòng)被覆蓋行為和預(yù)期不一致。解決升級(jí)規(guī)劃遵循“跨版本最多跳一個(gè)次版本”的原則。比如從3.11升到4.5至少應(yīng)該先升到4.1再升到4.5不要一口氣跳四個(gè)大版本。升級(jí)前先做完整備份命令行執(zhí)行升級(jí)避免瀏覽器頁面超時(shí)php admin/cli/upgrade.php --non-interactive邏輯說明--non-interactive讓升級(jí)腳本跳過交互確認(rèn)適合在腳本環(huán)境執(zhí)行。參數(shù)說明升級(jí)前把config.php里的debug臨時(shí)打開升級(jí)過程中出現(xiàn)warning能看到具體文件和行號(hào)升級(jí)完成后改回0。本地源碼的坑解決思路是不直接改源碼用local插件或主題機(jī)制承載自定義邏輯。如果已經(jīng)改了升級(jí)前先diff保存自定義升級(jí)后再合并。4.3 定時(shí)任務(wù)不跑很多“卡住”是假象現(xiàn)象郵件發(fā)不出去、課程備份不生成、用戶注冊(cè)后收不到確認(rèn)信后臺(tái)看任務(wù)隊(duì)列越積越多。原因Moodle大量異步任務(wù)依賴cron定期觸發(fā)。cron沒配置或配置錯(cuò)誤任務(wù)隊(duì)列只會(huì)越積越長(zhǎng)而且很多故障看起來像是插件問題。解決系統(tǒng)級(jí)cron每分鐘調(diào)用一次cron.php日志重定向到固定文件* * * * * /usr/bin/php /var/www/moodle/admin/cli/cron.php /var/log/moodle_cron.log 21邏輯說明cron.php每分鐘執(zhí)行一次按時(shí)間表調(diào)度處理隊(duì)列中的任務(wù)。參數(shù)說明日志重定向很重要cron腳本輸出到終端時(shí)經(jīng)常被系統(tǒng)當(dāng)郵件吞掉時(shí)間長(zhǎng)了查不到原因。注意php路徑用which php確認(rèn)不同發(fā)行版位置不同。檢查cron是否正常直接看后臺(tái)“定時(shí)任務(wù)”頁面的上次運(yùn)行時(shí)間正常情況下應(yīng)該在一兩分鐘以內(nèi)。我見過太多因?yàn)閏ron沒配好而“間歇性故障”的案例問題不在緩存不在插件只是定時(shí)任務(wù)斷了。4.4 安全加固目錄權(quán)限和后臺(tái)路徑是第一批要?jiǎng)拥捻?xiàng)目現(xiàn)象后臺(tái)登錄頁被掃描器高頻訪問或者數(shù)據(jù)目錄里的課程文件能被直接下載。原因Moodle默認(rèn)的/admin路徑太顯眼容易被掃描工具盯上數(shù)據(jù)目錄權(quán)限放得太寬Web服務(wù)能直接解析目錄內(nèi)的文件。解決第一步收緊數(shù)據(jù)目錄權(quán)限屬主改為Web服務(wù)用戶權(quán)限700chown -R www-data:www-data /var/moodledata chmod 700 /var/moodledata第二步調(diào)整后臺(tái)入口路徑減少被批量掃描的概率。不要只依賴隱藏路徑后臺(tái)登錄加驗(yàn)證碼和IP白名單更實(shí)際。安全加固里還有一個(gè)容易忽略的點(diǎn)config.php文件本身。文件權(quán)限建議設(shè)置為640屬主為Web服務(wù)用戶避免其他賬號(hào)可讀。5. 性能優(yōu)化與監(jiān)控低成本高回報(bào)的幾個(gè)動(dòng)作平臺(tái)跑起來之后問題會(huì)從“能不能用”變成“夠不夠快”。這章落在性能排查和優(yōu)化上按定位、配置、驗(yàn)證三步走。5.1 先定位再調(diào)優(yōu)慢查詢?nèi)罩驹趺从肕oodle頁面變慢的原因往往不在PHP而在數(shù)據(jù)庫。先把慢查詢?nèi)罩敬蜷_收集一天數(shù)據(jù)再說# MySQL/MariaDB開啟慢查詢?nèi)罩居涗洺^2秒的語句 SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 2; SET GLOBAL slow_query_log_file /var/log/mysql-slow.log;邏輯說明慢查詢?nèi)罩居涗洺^閾值的SQL語句定位到具體查詢后再判斷是缺索引、查詢量大還是緩存沒命中。參數(shù)說明2秒閾值適合大多數(shù)場(chǎng)景線上繁忙的平臺(tái)可以降到1秒日志會(huì)更嘈雜需要按天清理。慢查詢?nèi)罩纠锍霈F(xiàn)頻率最高的是 mdl_logstore_standard_log 相關(guān)的寫入語句這是標(biāo)準(zhǔn)日志存儲(chǔ)插件產(chǎn)生的。如果日志查詢頻繁拖慢系統(tǒng)可以把日志存儲(chǔ)切換到“離線日志”或“外部數(shù)據(jù)庫”減少在線寫入壓力。5.2 緩存與會(huì)話Redis是性價(jià)比最高的升級(jí)Moodle自帶多級(jí)緩存支持最簡(jiǎn)單收益最大的是把會(huì)話和應(yīng)用緩存都放到Redis// config.php中啟用Redis緩存和會(huì)話存儲(chǔ) $CFG-session_handler redis; $CFG-session_redis_host 127.0.0.1; $CFG-session_redis_port 6379; $CFG-session_redis_database 0; $CFG-cachestores [ redis_cache [ name redis_cache, plugin redis, configuration [server 127.0.0.1:6379], ], ];邏輯說明Redis把會(huì)話從文件存儲(chǔ)改為內(nèi)存存儲(chǔ)多臺(tái)Web服務(wù)器可以共享會(huì)話同時(shí)減少數(shù)據(jù)庫重復(fù)查詢。參數(shù)說明session_redis_database指定Redis邏輯庫避免和其他業(yè)務(wù)數(shù)據(jù)混在一起生產(chǎn)環(huán)境給Redis加密碼否則6379暴露在公網(wǎng)上等于裸奔。緩存配置在后臺(tái)的位置是“站點(diǎn)管理 → 服務(wù)器 → 性能”。在“緩存配置”頁面可以看到當(dāng)前使用的緩存存儲(chǔ)類型如果顯示“默認(rèn)請(qǐng)求緩存”說明還沒啟用Redis。5.3 cron頻率和離線隊(duì)列的落地檢查Moodle的異步任務(wù)分為scheduled task和adhoc task兩類。adhoc task依賴cron觸發(fā)如果隊(duì)列積壓過多郵件、徽章、備份生成都會(huì)排隊(duì)。檢查隊(duì)列長(zhǎng)度可以看后臺(tái)“定時(shí)任務(wù)”也可以直接用CLIphp admin/cli/cron.php --force邏輯說明--force參數(shù)強(qiáng)制立即執(zhí)行一輪定時(shí)任務(wù)適合隊(duì)列積壓嚴(yán)重時(shí)人工干預(yù)。參數(shù)說明這個(gè)命令執(zhí)行過程中會(huì)看到每個(gè)任務(wù)的耗時(shí)時(shí)長(zhǎng)如果某個(gè)任務(wù)持續(xù)超時(shí)說明對(duì)應(yīng)的插件邏輯有問題需要單獨(dú)排查。5.4 性能壓測(cè)前的幾個(gè)確認(rèn)項(xiàng)做壓測(cè)之前先確認(rèn)三件事看是否已經(jīng)達(dá)到調(diào)優(yōu)基線config.php里cacheclass是否指向Redis、PHP的opcache是否開啟、數(shù)據(jù)庫的innodb_buffer_pool_size是否大于數(shù)據(jù)量。這三項(xiàng)都是幾行配置的事但收益最大; php.ini 中啟用OPcache減少PHP文件重復(fù)編譯 opcache.enable1 opcache.memory_consumption128 opcache.interned_strings_buffer16 opcache.max_accelerated_files10000邏輯說明OPcache生效后PHP腳本只編譯一次后續(xù)請(qǐng)求直接讀取內(nèi)存中的字節(jié)碼對(duì)Moodle這種文件多、每次請(qǐng)求加載大量PHP的場(chǎng)景非常明顯。參數(shù)說明max_accelerated_files要大于Moodle目錄內(nèi)PHP文件數(shù)量可以執(zhí)行find /var/www/moodle -name *.php | wc -l確認(rèn)。我在接手Moodle維護(hù)后養(yǎng)成一個(gè)習(xí)慣每次改完配置先跑一遍php admin/cli/check.php確認(rèn)沒有配置項(xiàng)異常再做業(yè)務(wù)驗(yàn)證。Moodle的坑大多不是藏起來的而是運(yùn)行時(shí)才暴露。希望這篇指南能幫你在接手Moodle管理時(shí)少走幾步彎路把精力留給真正的業(yè)務(wù)調(diào)整。本文還有配套的精品資源點(diǎn)擊獲取