大量 3306 TIME_WAIT 的邪道解法

不知道會不會衍生其他問題,有後續狀況再更新

出現大量的 TIME_WAIT 大概長這樣

通常 Google 找到的資料是這樣

會噴 cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory 錯誤,而且問題沒有改善,可以得知關鍵就是 tcp_tw_recycle 這個參數,只好繼續找答案

  • sysctl -p 設定啟用

418 total views, 2 views today

需量預測

參考

公式

  • P = 時間 t 時之累計電力量
  • Δt = 標本時間
  • ΔP = 標本時間內增加電力增加量
  • t = 開始測量時間

範例

假設有一個穩定的 100kW 負載,於某需量區間 4 分量測,取前一分鐘為標本時間

100kW = 100 度(kWh) ,需量區間  = 100 / 4 = 25 (每 15 分鐘一個結算)

每分鐘電度約等於 25 /15 = 1.667

P = 1.667 * 4 = 6.668

Δt =1

ΔP = 1.667

6.668 + (1.667/1) * (15-4)

= 6.668 + (1.667) * 11

= 6.668 + 18.337

= 25.005 kWh * 4 = 100.02 kW

由此得知此需量預測公式是準確的

LaTeX

220 total views, 1 views today

PHP 7 – OpCache

結論

  1. 主要作用在提昇 PHP 執行效能,以及簡易的程式加密
  2. 使用 OpCode 加密可以保護程式邏輯,不能保護「程式內的字串」

php.ini

  • opcache.enable=1 ; 啟用 OpCache
  • opcache.save_comments=0 ; 關閉 comments
  • opcache.file_cache=/opt/Server/OpCache ; 設定 OpCache Cache 路徑
  • opcache.validate_timestamps=0 ; 關閉檔案更新檢查,配合下面的程式保護
  • opcache.revalidate_freq=0 ; 檔案更新檢查時間
  • opcache.max_accelerated_files=4000 ; 最大 cache 檔案數,需要大於總 .php 數量

重新啟動 apache2 服務

保護程式作法

先將所有 .php 檔案編譯成 OpCache 之後就可以將 .php 原始碼檔案清空或是填入不相關內容

使用 PHP 官網範例稍加修改,將 require_once 替換為 opcache_compile_file(),官網有針對兩者之間的差異說明,請根據實際情況選用

在網路根目錄執行以下執行即可將所有 .php 檔案內容清空

更新

因為使用了禁用時間戳檢查,以及將原始碼清空,因此更新時,必須由開發主機提供 .php.bin 檔,OpCache 檔案皆是 www-data 使用者權限,可以使用 tar 打包及還原

.php.bin 檔案更新後,必須使用 opcache_reset() 或 opcache_invalidate() 來啟用新的 .php.bin 檔

計算 php 檔案數量

OpCache 長相

節錄內容

Preload

PHP 7.4 增加了 opcache.preload & opcache.preload_user 參數,因為原始碼後來會清空,因此不適用此參數

371 total views, no views today

MQTT – 使用 Let’s Encrypt SSL + EMQ X 建構 SSL WebSocket

原理

  • 網站的證書和 MQTT (WebSocket) 的證書必須一致
  • Let’s Encrypt 證書檔案必須讓 emqx 帳號有讀取權限

編輯emqx.conf

  • 請自行替換 {web url} 為你的網域
  • .ssl. 是 MQTT使用;.wss. 是 WebSocket 使用

Let’s Encrypt 證書檔案權限

要讓 emqx 可以讀取 Let’s Encrypt 產生的證書,最大的問題就是目錄和檔案的讀取權限。

預設的權限大多是只有 root 使用者可以讀,最方便的方式是將 /etc/letsencrypt 的 archive & live 的其他人讀取開放

可以使用一般使用者讀取證書檔案測試,如果沒問題就可以重啟 emqx 服務

HTML

在使用上和沒有 SSL 差別不到,注意 mqtt.connect() 的通訊協定是 wss:// 以及 port 的設定即可。

網路上可能會找到有關 MQTT.js 證書相關的設定,不過那些設定並沒有什麼卵用,因為當網站是 https:// 時瀏覽器就會檢查如果是同網站就需要使用相同證書,不同網站就會發生跨網站的相關錯誤,當然現在也是不能和 http 混用

在 F12 console 下如果沒有看到錯誤恭喜已經成功了。

377 total views, 2 views today