錯誤命令
String cmdStr = "F:/memcached_en32or64/x64/memcached.exe –d start"; // 注意:– 為全形長破折號,非 ASCII 連字號 -
修正
String cmdStr = "F:/memcached_en32or64/x64/memcached.exe -d start"; // 標準 ASCII 連字號 -
完整 memcached 參數說明
memcached.exe -h
-p TCP 監聽埠 (預設 11211)
-U UDP 監聽埠 (預設 0 關閉)
-l 綁定 IP (預設 INADDR_ANY)
-d start 作為服務啟動
-d restart 重啟服務
-d stop|shutdown 停止服務
-d install 安裝為 Windows 服務
-d uninstall 移除服務
-m 最大記憶體 (預設 64MB)
-c 最大並發連線 (預設 1024)
-v / -vv 詳細/極詳細日誌
Java 執行最佳實踐
- 使用
ProcessBuilder 而非 Runtime.exec(),正確處理參數陣列、工作目錄、環境變數。
- 啟動後讀取
stdout/stderr 確認是否成功,避免靜默失敗。
- 生產環境建議用 **Windows 服務管理器 (sc create / sc start)** 或 **NSSM** 托管 memcached,而非 Java 臨時啟動。
ProcessBuilder pb = new ProcessBuilder(
"F:/memcached_en32or64/x64/memcached.exe", "-d", "start");
pb.directory(new File("F:/memcached_en32or64/x64"));
Process p = pb.start();
// 讀取 p.getInputStream() / getErrorStream() 判斷結果