Linux

查看記憶體時脈及世代 Linux or Ubuntu

方法一:

sudo dmidecode -t memory

輸出結果:

# dmidecode 3.1
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.

Handle 0x0039, DMI type 16, 23 bytes
Physical Memory Array
	Location: System Board Or Motherboard
	Use: System Memory
	Error Correction Type: None
	Maximum Capacity: 64 GB
	Error Information Handle: Not Provided
	Number Of Devices: 4

Handle 0x0047, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x0039
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: ChannelA-DIMM0
	Bank Locator: BANK 0
	Type: DDR4
	Type Detail: Synchronous
	Speed: 2667 MT/s
	Manufacturer: 04CB
	Serial Number: 6EF60200
	Asset Tag: 9876543210
	Part Number: DDR4 2666 2OZ       
	Rank: 1
	Configured Clock Speed: 2667 MT/s
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: 1.2 V

Handle 0x0048, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x0039
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: ChannelA-DIMM1
	Bank Locator: BANK 1
	Type: DDR4
	Type Detail: Synchronous
	Speed: 2667 MT/s
	Manufacturer: 04CB
	Serial Number: 2CF20200
	Asset Tag: 9876543210
	Part Number: DDR4 2666 2OZ       
	Rank: 1
	Configured Clock Speed: 2667 MT/s
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: 1.2 V

Handle 0x0049, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x0039
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: ChannelB-DIMM0
	Bank Locator: BANK 2
	Type: DDR4
	Type Detail: Synchronous
	Speed: 2667 MT/s
	Manufacturer: 04CB
	Serial Number: 04F40200
	Asset Tag: 9876543210
	Part Number: DDR4 2666 2OZ       
	Rank: 1
	Configured Clock Speed: 2667 MT/s
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: 1.2 V

Handle 0x004A, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x0039
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: ChannelB-DIMM1
	Bank Locator: BANK 3
	Type: DDR4
	Type Detail: Synchronous
	Speed: 2667 MT/s
	Manufacturer: 04CB
	Serial Number: DBEF0200
	Asset Tag: 9876543210
	Part Number: DDR4 2666 2OZ       
	Rank: 1
	Configured Clock Speed: 2667 MT/s
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: 1.2 V

方法二:

sudo lshw -short -C memory

輸出結果:

H/W path               Device          Class          Description
=================================================================
/0/0                                   memory         64KiB BIOS
/0/39                                  memory         32GiB System Memory
/0/39/0                                memory         8GiB DIMM DDR4 Synchronous 2667 MHz (0.4 ns)
/0/39/1                                memory         8GiB DIMM DDR4 Synchronous 2667 MHz (0.4 ns)
/0/39/2                                memory         8GiB DIMM DDR4 Synchronous 2667 MHz (0.4 ns)
/0/39/3                                memory         8GiB DIMM DDR4 Synchronous 2667 MHz (0.4 ns)
/0/43                                  memory         384KiB L1 cache
/0/44                                  memory         1536KiB L2 cache
/0/45                                  memory         9MiB L3 cache
/0/100/14.2                            memory         RAM memory

PHP 優化 – 啟用 HugePage (php7.4-fpm & php8.0-fpm)

啟用 Linux 系統的 HugePage(大型暫存分頁機制)可讓 PHP 的 Text 段落和記憶體中的分頁都改用 HugePage 來儲存,來減少 TLB(Translation Lookaside Buffer)遺失而提高效能。原本系統記憶體多以 4KB 來分頁,但啟用 HugePage 後則改以 2MB 來分頁。CPU 存取記憶體時,得查表才能得知虛擬定址和記憶體定址間的轉換,CPU 會透過 TLB 暫存來加速查表。若分頁單位越小,分頁筆數就越多,查表時就會得建立越多 TLB ,容易造成暫存資料的遺失而得重查,啟用了大型 HugePage 分頁設定就能減少 TLB 數量而降低遺失的問題。

若以小小站規模,透過sudo sysctl vm.nr_hugepages= 256 指令,來分配 256 個預留的大型暫存分頁(共 512MB)),然後在php.ini設定檔中加入 opcache.huge_code_pages=1的敘述就能啟用。

啟用 hugepages

sudo sysctl -w vm.nr_hugepages=256 && echo 'vm.nr_hugepages=256' | sudo tee -a /etc/sysctl.conf > /dev/null

編輯 php.ini 啟用功能

opcache.file_cache="/dev/shm"
opcache.huge_code_pages=1

觀察 hugepages 動態

ubuntu@host:~$ grep Huge /proc/meminfo
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:     256
HugePages_Free:      231
HugePages_Rsvd:       25
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:          524288 kB

php 使用的記憶體

ubuntu@host:~# size /usr/bin/php7.4
   text    data     bss     dec     hex filename
4061631  573374  119376 4754381  488bcd /usr/bin/php7.4

Oracle VM VirtualBox 各種技巧筆記

先前的筆記

新增整理各式用到的 Oracle VM VirtualBox 技巧筆記

最近因為很多需要實驗的環境,所以用 VirtualBox 開了一堆 VM,避免年紀大了記性差,再把筆記整理一下。

啟用 SSE4.1 跟 SSE4.2 – Passing Through SSE4.1/SSE4.2 Instructions

VBoxManage setextradata VM-Name VBoxInternal/CPUM/IsaExts/SSE4.1 1
VBoxManage setextradata VM-Name VBoxInternal/CPUM/IsaExts/SSE4.2 1

壓縮磁碟沒用的空間

在 Guest 先要做的(.vdi 檔案移到傳統硬碟,修改設定好之後再跑以下)

  • 清理硬碟工具
  • 再跑 Defrag
  • 跑 Defrag 之後再用 SDelete 把沒用的磁區歸零,指令如下。
Sdelete64.exe -z c:

壓縮 .vdi 檔

VBoxManage modifymedium disk VM-Name.vdi --compact

創建掛載實體硬碟或是分割區

一切都是為了效能跟便利性XD

建立實體硬碟的虛擬檔案

創建好之後,再掛載到虛擬機器上去,以下以 Linux 為案例。

VBoxManage internalcommands createrawvmdk -filename '/VMs/physical-disk.vmdk' -rawdisk /dev/sdx

設定及清除 /var/log/journal

每次看到肥肥的 /var/log/journal 資料夾就會很啊雜,沒事佔用了幾百 MB 的空間

清理 journal 檔

journalctl --vacuum-time 2d
journalctl --vacuum-size 10M

設定 journal 檔的大小

sudo vim /etc/systemd/journald.conf,更改這兩行

SystemMaxUse=10M
SystemMaxFileSize=10M

重新啟動 systemd-journald

sudo systemctl restart systemd-journald.service

http cache control

Apache2

sudo a2enmod expires
sudo a2enmod headers

 

.htaccess

<filesMatch ".(ico|pdf|flv|jpg|svg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</filesMatch>

 

硬碟、固態硬碟相關指令

共通選項

  • 用 gdisk 指定成 gpt
  • 保留空間 0%
  • 格式化的時候(開機碟或 BBS 及其他用途除外),因為檔案都很大,用不到那麼多 inode
sudo mkfs.ext4 -m 0 -T largefile4 -L $Lable -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdc1

如果當初 mkfs 的時候忘記 -m 0 的話

sudo tune2fs -m 0 /dev/sdx1

SSD 的設定

/etc/default/grub 裡頭,GRUB_CMDLINE_LINUX_DEFAULT= 這行加入下面這段。

elevator=deadline
echo 0 > /proc/sys/vm/swappiness

查詢 PCIe 裝置速度

lspci | grep -i 3ware
01:00.0 RAID bus controller: 3ware Inc 9650SE SATA-II RAID PCIe (rev 01)
lspci -n | grep 01:00.0
01:00.0 0104: 13c1:1004 (rev 01)
sudo lspci -n -d 13c1:1004 -vvv | grep -i width
LnkCap: Port #0, Speed 2.5GT/s, Width x8, ASPM L0s L1, Exit Latency L0s &lt;512ns, L1 &lt;64us
LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk- DLActive+ BWMgmt- ABWMgmt-

 

Linux 解壓縮大量檔案

因為我每次都會忘記後面要加上 {} \; 筆記一下。

find ./ -name '*.rar' -exec 7z x {} \;
find ./ -name '*.tar' -exec tar xvf {} \;
find ./ -name '*.tar.gz' -exec tar zxvf {} \;

當然 zip, rar 等檔案可以換用 unrar x 或是 unzip