初心易得,始終難守
C'est la vie.© 2002 - 2025
  • 我是誰-Who Am I
  • 我在哪-Where Am I
  • 我是什麼-What Am I
  • 年鑑-YearBook
    • Year 2006
    • Year 2008
    • Year 2009
    • Year 2010
    • Year 2011
    • Year 2012
    • Year 2013
    • Year 2014
    • Year 2015
  • 連結
RSS
5 月 5 日, 2025 年

在AWS EC2 instance 上添加一個swap

Ken Tech 0 Comments

雖然這是一個常規動作,但是我最近發現一個特別的配置。

OOM 不是經常發生的事情,他是一個偶發事件,通常是因為業務流量突增,或是Java memory leak,之所以要說Java 因為他最容易出問題,code 寫得好就是Enterprise level,code 寫得差就是 OOM level。

一般來說我會將swap 空間放置於ebs 上,這樣做沒什麼問題,但極端情況下很可能會導致整個ec2 失去響應,那麼這時候你可以使用第二塊較小的單獨的data volume 來做swap,或者直接啟動具有instance store 的ec2,使用instance store 的高速ssd 來swap。

使用ebs 來swap:

fallocate -l 1G /home/swapfile
chmod 600 /home/swapfile
mkswap /home/swapfile
swapon /home/swapfile

Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=12438694-fc0d-4e8b-b7a8-41c6a9e38971

添加到fstab:

/home/swapfile  none    swap    sw      0       0

使用instance store 來swap

mkswap /dev/nvme1n1
swapon /dev/nvme1n1

Setting up swapspace version 1, size = 54.9 GiB (58999992320 bytes)
no label, UUID=3afa04d4-787f-4c31-a491-3581a41c3bb1

添加到fstab:

UUID=3afa04d4-787f-4c31-a491-3581a41c3bb1  none    swap    sw      0       0

instance store 做swap 的效果非常好,因為本地的高速ssd 可以承載較高的iops 和throughput ,可以抗住數倍於memory size 的workload,當然,這還要看你的應用類型和可以接受的響應時間。

OK,這些方式都要花錢,那麼有沒有不花錢,又可以避免在短暫的異常下OOM 的辦法?畢竟一說到要花更多的錢,老闆都會很不開心。

今天要說的是zram,從名字就可以看出他就是zip ram的意思,在Amazon Linux 2023 中已經預裝了相關的組件,可以直接修改配置文件即可啟用這項功能。

我也是偶然發現他的,因為我發現在micro type 的instance 上才會有swap 而更大的instance type 沒有,而且在更換instance type 的時候他會自己更動。

在預設的配置文件中,只有memory 小於800M 的instance type 才會啟用一個和memory 大小相同的zram device,只需要將host-memory-limit 改為超過當前instance type memory size 的大小,重啟即可。


cat /usr/lib/systemd/zram-generator.conf 
# This config file enables a /dev/zram0 device with the default settings:
# — size — same as available RAM or 8GB, whichever is less
# - host-memory-limit: Enable only on small instance types (less than 800MB)
# — compression — most likely lzo-rle
#
# To disable, uninstall zram-generator-defaults or create empty
# /etc/systemd/zram-generator.conf file.

# zram0 defaults to swap
[zram0]
# Up to 8GiB of zram, follows Fedora/CentOS defaults
zram-size = min(ram, 8192)
# Instances with more than 800MiB of RAM don't need this on AL2023
host-memory-limit=4096
# This is the kernel default, fastest but maybe we want zstd for
# small instances which compresses more ?
compression-algorithm=lzo-rle

看看加上沒有:

zramctl 
NAME       ALGORITHM DISKSIZE  DATA  COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle       3.7G 11.7M 336.5K  708K       1 [SWAP]

壓縮比例可以到多少?

這是個玄學,我還沒有找到可信的評測,但是廣泛的評價是可以從 1:1 到 3:1,畢竟放入memory 的data 有些是已經壓縮過的,那麼就只能是團進團出,沒壓縮過的data 也許可以多一點點。

回到之前的問題,這主要是為了解決在短暫的異常下不要那麼容易OOM,他也可能帶來一些副作用,比如CPU負載上升,但和不要OOM 比起來似乎沒有那麼重要,持續的memory leak 仍會導致OOM發生,任何形式的swap 都只是應對偶然的突發狀況,而不是長期性的超過memory size 的使用,如果已經預期當前的application workload 會使用到超過instance type 的memory size,就應該要及時的升級。

4 月 19 日, 2025 年

斷斷續續看完了《生死場》

Ken 随笔 0 Comments

我想蕭紅的獨特應該是在於,他沒有那麼左。

花了大概20天的時間,斷斷續續看完了《生死場》,因為語言帶有那個年代的特徵,台灣的版本不像中國的版本竄改了許多當時的語言,使得我讀起來頗費一些心思去想到底是什麼意思,還有一些口語又沒那麼口語化,使得我揣測東北人講那句話的口氣,但就還好,因為罵人的言語也不過那麼幾句。

魯迅作序並不是什麼好事,畢竟他弟弟在文學方面的成就比他高得多,充其量算是個現在的公知,就像很多人說的,還好他死在了舊社會。

《生死場》中對於底層民眾的描繪有獨特的地方,因為有一些場景竟然是我想像不到的,例如月英的綠色牙齒,其他的描繪,或多或少算是見過一些。我並不認為最後幾個章節對於滿洲國的描繪是他人生中的體驗,因為看起來沒有深度,更像是為了迎合當時的抗日潮流而寫就的一些文字,我並不是說日軍沒有作惡,而是那些道聽途說的作惡多端和前面對於生死的描繪,比起來顯得事不關己。

而其中關於地主階級對農民殘酷壓榨的描繪,更顯得突兀,如果基於小說本身的衝突效果,當然沒問題,但這和《呼蘭河傳》中關於地主爺爺對待租戶的的描繪完全兩極,而《呼蘭河傳》是他在人生歲月的最後完成,我當然願意相信後面的作品更接近他短暫人生中的真實。

比起來陸老師強力推薦的《邊城》聽起來更像靡靡之音啊……

4 月 17 日, 2025 年

將WordPress 的Redis plugin 配置為使用AWS ElastiCache redis cluster

Ken Tech 0 Comments

這個plugin 已經存在很多年,一直以來我都使用single node 的方式,因為wordpress 的cache data 從mysql 取一遍沒有太大的難度,但是對於高負載的網站來說,這總是不合理的。

而single node 有他壞掉後就要從database reload data 的問題,雖然眾多的雲端服務商提供了failover 的機制來避免node 壞掉不可用的問題,但難免會有某些網站需要大量的寫入,比如wordpress.com這樣的。

這個plugin 應該很早就支持cluster 的方式了,只不過我從來沒注意過,而他的github 又語焉不詳,我想他可能是想要賣他的pro 版本。

嘗試了一下,有一點需要注意的地方:

single node 方式支持tls,但cluster mode 不支持tls,所以elasticache serverless 不行,因為serverless 的tls 無法關閉,只能是self design cluster mode enabled。

我認為作者在這個地方隱晦的表明了這一點,雖然他沒有直接講出來。

用如下的方式配置wp-config.php 即可。

/**wp redis object cache*/
define('WP_REDIS_CLIENT','pecl');
define('WP_REDIS_CLUSTER', [ 'tcp://valkey-cluster.clustercfg.apn3.cache.amazonaws.com:6379',] );

那麼php session 呢?

修改php.ini 原來的配置,如下兩處,

;session.save_handler = redis
session.save_handler = rediscluster

;session.save_path = "tcp://valkey.0001.apne1.cache.amazonaws.com"
session.save_path = "seed[]=valkey-cluster.clustercfg.apn3.cache.amazonaws.com:6379"

一個有用的測試session 的script

<?php
//simple counter to test sessions. should increment on each page reload.
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
echo $count;

$_SESSION['count'] = ++$count;

再看看ElastiCache 裡面有了沒,雖然不應該用keys command ……

valkey-cluster.clustercfg.apn3.cache.amazonaws.com:6379> keys *PHP*
1) "PHPREDIS_CLUSTER_SESSION:d9uv2emobrcmpc7g5fk7bduqgq"
2) "PHPREDIS_CLUSTER_SESSION:d30c1t3kln5df0uij8f7gqibnt"
3) "PHPREDIS_CLUSTER_SESSION:bh5buktvsumi1k6j7hcpjcil6c"
4) "PHPREDIS_CLUSTER_SESSION:3s6jagi622rt0nqdof9i1otd09"
5) "PHPREDIS_CLUSTER_SESSION:fq6tnls1dcfv0bspljq9j2k5i4"
6) "PHPREDIS_CLUSTER_SESSION:1p1ajkvr641cp99edm9cm74o6s"
4 月 10 日, 2025 年

日漸破敗的鄉下故居

Ken 随笔 0 Comments

一年後的又回鄉一個星期,洗手池的下水管路排水管壞了,廚房的排風扇壞了一些,像要散架的樣子,地板有幾塊鬆動,浴室門口的開關面板按鈕壞了幾顆,搖搖晃晃的還搭在上面,掉了一顆,我把它撿起來又扣回去,花壇裡面的植物可能還沒到夏天,看起來並不茂盛,也沒有要瘋狂生長的樣子。

露台遮雨棚外沿排水槽的鐵皮被雨水侵蝕到破了洞,一下雨就瀝瀝拉拉,雨大的時候,形成一股很大的水流,滴到地上往回濺到快要到門口。

把媽咪做的酵素又倒了不少,扔了大概五六瓶,幺姥說她要,但是她又不來拿走,反而是各種雜物越堆越多。

今年的清明依舊是下雨的,不過比起來是小得多,山上的小路都沒有濕,每年清明去買花,都會有人說啊在下雨,我心想哪一年清明不下雨,年年清明都在下雨。

父母的墳頭略顯單調,因為尚未立碑,於是在網上買了一些小花的種子,撒在上面,不知道明年會不會看見有花長出來,花錢買他家田地做墳的那個叔叔,似乎也沒有認真整理這些立在他們家田頭的墳地,堆了一些植物的竿子在墳前,明年清明我應該帶上打火機去把這些燒掉,還應該買一個金紙桶。

乘著這中間的間隙,把《呼蘭河傳》重新看了一遍,應該把陸老師強力推薦的《邊城》看完才對,看了這麼久,還只看到剛開始擺渡。

葳君推薦了《白夜行》給我,說是裡面有看到我的影子,等我看完再說罷。

高鐵的前面坐了一個漂亮妹紙,睡著睡著毛衣袖子掉了下來掃地板,我給她甩了上去,她睡著睡著又掉了下來掃地板,我又給她甩了上去,當他第三次掉下來的時候,我想,罷了,大概這件毛衣注定是要掃地板的吧,雖然這是一件淘寶要價1500人民幣的毛衣。

她要是不漂亮,我是肯定不會去撿起來甩上去的。

小又說重慶的天氣算是最好的時候,前幾天太冷,再過兩天就太熱,她的伴侶一如既往的為著眾人的開心而逗樂,貓兄和豪哥看起來很好,亦或是不明不白更為快樂。一起吃了一餐更像是廣東海鮮火鍋的東西,我也說不出來更像什麼,花膠雞椰子雞這種東西應該是廣東菜。

從鄉下帶了一大包瓜子,在Hotel 的時候一邊看書一邊嗑了一些,於是帶上飛機,快要落地的時候,空姐廣播說,請勿攜帶任何食物入境,如有攜帶請交給他們處理。

我心想,你們是不是想吃我的瓜子。

但終於我還是沒有把瓜子帶回台北,因為落地的時候我上網搜索了一下,瓜子屬於種子類,不能帶,只好把他塞進了座椅前面的置物籃,走到檢查點的時候我就後悔了,應該帶下來問問。

杰妹在全球各地跑馬拉松,發來照片,然後問我,Guess where I am,我心想,哎,你是不是攀岩摔太多把腦子摔傻了?

4 月 9 日, 2025 年

Security group 的conntrack 問題

Ken Tech 0 Comments

在AWS 上創建的EC2 有一個奇怪的問題,似乎是由於Security group 的conntrack 造成的,即使修改為允許所有UDP 流量也不行。

當self-hosted ipsec-vpn 和地端連結建立後,此時從地端無法ping 通雲端,也無法開始傳輸,但tunnel 已經建立,看狀態都是正常,

當從雲端的EC2 對地端發送一個ping 包之後,流量才開始傳輸,也就是說,首發流量必須由EC2 發起。

問題是否真的由security group 引起我沒有確認,因為我沒有什麼頭緒,但首發流量由EC2發起就能解決,看起來就是security group 的問題。解決這個問題倒是簡單,ping 一下。

在VPC 內使用VPN 服務建立的ipsec tunnel 則沒有這個問題,當然,由於那是managed service,我們不能明確AWS 到底在裡面搞了什麼,說不定他也是在底層的EC2 上ping 了一下。

所以問了AI,寫個定時ping 的script

sudo vi /usr/local/bin/multi-ping.sh

#!/bin/bash

# List of hosts to ping
HOSTS=(
    "10.1.1.2"
    "10.1.2.2"
    "10.1.3.3"
)

# Ping interval in seconds
INTERVAL=60

while true; do
    for host in "${HOSTS[@]}"; do
        timestamp=$(date '+%Y-%m-%d %H:%M:%S')
        ping -c 1 $host | while read pong; do
            echo "[$timestamp] $host - $pong" >> /tmp/multi-ping.log
        done
    done
    sleep $INTERVAL
done

然後創建一個service

sudo vi /etc/systemd/system/multi-ping.service

[Unit]
Description=Multiple Host Ping Service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/multi-ping.sh
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

啟動他

sudo systemctl daemon-reload
sudo systemctl enable multi-ping
sudo systemctl start multi-ping

看一下log

[2025-04-03 00:44:25] 10.1.1.2 - 64 bytes from 10.1.1.2: icmp_seq=1 ttl=63 time=48.9 ms
[2025-04-03 00:44:25] 10.1.1.2 - 
[2025-04-03 00:44:25] 10.1.1.2 - --- 10.1.1.2 ping statistics ---
[2025-04-03 00:44:25] 10.1.1.2 - 1 packets transmitted, 1 received, 0% packet loss, time 0ms
[2025-04-03 00:44:25] 10.1.1.2 - rtt min/avg/max/mdev = 48.931/48.931/48.931/0.000 ms
[2025-04-03 00:44:25] 10.1.3.3 - PING 10.1.3.3 (10.1.3.3) 56(84) bytes of data.
[2025-04-03 00:44:25] 10.1.3.3 - 64 bytes from 10.1.3.3: icmp_seq=1 ttl=63 time=301 ms
[2025-04-03 00:44:25] 10.1.3.3 - 
[2025-04-03 00:44:25] 10.1.3.3 - --- 10.1.3.3 ping statistics ---
[2025-04-03 00:44:25] 10.1.3.3 - 1 packets transmitted, 1 received, 0% packet loss, time 0ms
[2025-04-03 00:44:25] 10.1.3.3 - rtt min/avg/max/mdev = 301.351/301.351/301.351/0.000 ms
1 2 3 4›»

剧情

過客

  • R2 on 卷進了美商
  • Ken on Mommy最後的樣子
  • R2 on Mommy最後的樣子
  • Ken on 天朝Loli控组曲(带歌词,修正版)
  • liu on 天朝Loli控组曲(带歌词,修正版)
  • R2 on 甜點不錯的西紅市
  • Ken on 甜點不錯的西紅市
  • R2 on 甜點不錯的西紅市
  • Ken on 甜點不錯的西紅市
  • R2 on 甜點不錯的西紅市
May 2025
S M T W T F S
 123
45678910
11121314151617
18192021222324
25262728293031
« Apr    

Spam Blocked

101,808 spam blocked by Akismet

↑

© 初心易得,始終難守 2025
Powered by WordPress • Themify WordPress Themes