2021-08-31

發現CPU及HD溫度太高,用cpulimit降低吃cpu程式的頻率,hdparm讓硬碟待命(standby, sleep)

最近發現在linux上用wine跑LINE非常吃CPU(近期發生,可能是這個原因,發生在wine6.8+以上,後來換回wine6.5就沒問題了),CPU溫度飆到快90度,於是用cpulimit降低wineserver這支程式的cpu頻率,先安裝cpulimit,並寫一支script執行,限制最高cpu最高吃到10%:

#/bin/bash
cpulimit --path /home/username/.PlayOnLinux/wine/linux-x86/6.13/bin/wineserver --limit 10

但有個缺點,打字輸入line變得非常慢還會掉字,開圖跟捲動也很慢,只好要跟人溝通時先關掉cpulimit,沒要輸入文字時再打開。

ref:
https://blog.gtwang.org/linux/limit-cpu-usage-of-a-process-in-linux-with-cpulimit-tool/
http://cpulimit.sourceforge.net/

另新裝了一顆從NSA的退下的3TB機械硬碟,查smart資訊發現溫度異常的高,我也不確定這樣正不正常,怕它提早掛掉,只好想辦法讓它平時待命以降溫。

1.方法一:修改 /etc/hdparm.conf,設定10分鐘後無存取待命,加入:

command_line {
hdparm -S 120 /dev/sdb
}

2.方法二:用systemd,新增或修改/etc/systemd/system/hdparm.service:

[Unit]
Description=hdparm sleep

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -q -S 120 -y /dev/sdb

[Install]
WantedBy=multi-user.target

3.方法三:

直接叫出GUI磁碟工具,選擇要設定的硬碟,再按視窗右上角的「磁碟機設定值」,設定進入待命時間:


ref:
https://wiki.archlinux.org/title/hdparm#Putting_a_drive_to_sleep_directly_after_boot
https://askubuntu.com/questions/39760/how-can-i-control-hdd-spin-down-time
http://elmaz.blogspot.com/2009/08/ubuntu-linux-hdd-suspend.html

2021-08-29

Linux Mint的登入視窗(greeter)方向錯誤 & grub解析度(resolution)錯誤

 最近升級了辦公室電腦,把系統移到新電腦後,發現登入視窗的螢幕方向是左旋90度的(但登入後就變正常了),由於一直是使用雙螢幕但之前是沒這個問題的,即使重新設定設定中的「登入視窗」指定螢幕也是沒有用,於是只好直接修改/etc/lightdm/lightdm.conf,加入:

[Seat:*]
display-setup-script=xrandr -o right

強迫再右旋回來。

2022/02/22 updated:
原因是換了GTX 1660顯示卡後,/etc/X11/xorg.conf並末重新產生,導致還是舊的GT 710的設定,
可利用nvidia-xconfig或nvidia-settings重新產生xorg.conf:
https://wiki.archlinux.org/title/NVIDIA#Xorg_configuration

用nvidia-settings的話,點左邊X server Display Configuration,再點右下的Save to X Configuration File,但若是無法成功寫入的話,那麼就自行複製Preview的內容貼到xorg.conf。

GRUB的登入解析度也是變成640x480,因無法先載入nvidia驅動的關係,修改 /etc/default/grub,加入:

GRUB_GFXMODE=1024x768
GRUB_GFXPAYLOAD_LINUX=keep

再存檔執行 sudo update-grub 重開機。
(先執行sudo hwinfo --framebuffer或進grub執行videoinfo確定支援的framebuffer有哪些)

ref:
https://askubuntu.com/questions/408302/rotated-monitor-login-screen-needs-rotation
https://www.binarytides.com/ubuntu-fix-nvidia-graphics/
https://askubuntu.com/questions/54067/how-to-safely-change-grub2-screen-resolution
https://askubuntu.com/questions/217758/how-to-make-an-xorg-conf-file
https://zhuanlan.zhihu.com/p/33983810

2021-08-25

tomcat啟用jstatd及jmx (VisualVM)

因為jmx及jstatd二個用VisualVM連線時,jmx無法使用Visual GC,jstatd無法使用Mbeans(怎麼這麼煩啊),所以二個乾脆都給它同時啟用。


1.新增 /usr/lib/systemd/system/tomcat-jstatd.service:(jstatd預設port開在1099)
#Tomcat jstatd monotor service
[Unit]
Description=jstatd monitor for tomcat
Wants==tomcat.service
After=tomcat.service

[Service]
Type=simple
ExecStartPre=/bin/bash -c "echo -e 'grant { permission java.security.AllPermission; };' > /tmp/jstatd.policy"
ExecStart=/usr/bin/jstatd -p 1099 -J-Djava.security.policy=/tmp/jstatd.policy -J-Djava.rmi.server.hostname=<your_public_ip>
ExecStopPost=/bin/bash -c "rm /tmp/jstatd.policy"
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

2.修改  /usr/lib/systemd/system/tomcat.service: (rmi port固定在1100,若不設定的話會隨機; jmx port開在1101,一定要設)

[Service]
...
#JMX form VisualVMEnvironment='JAVA_OPTS=-Djava.rmi.server.hostname=<your_public_ip> -Dcom.sun.management.jmxremote.rmi.port=1101 -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'


3.防火牆規則記得修改開通1099, 1100, 1101,不過我是直接把自已的網段加入zone=trusted,這樣所有的port都可以連:

sudo firewall-cmd --zone=trusted --add-source=100.101.102.0/24 --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all --zone=trusted

2021-08-24

升級JDK 1.8至最新版本後,MySQL Connector/J (TOMCAT JDBC)無法正常連線MySQL

升級JDK後,發現MYSQL JDBC無法連到資料庫,查了一下log,發現以下錯誤訊息:

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

看來又是TLS無法自動降級使用的問題,先到mysql下指令看一下目前使用的tls版本:

mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
+---------------+-----------------------+
| Variable_name | Value                 |
+---------------+-----------------------+
| tls_version   | TLSv1,TLSv1.1      |
+---------------+-----------------------+

1.首先嘗試修改JDBC連線字串,加入
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1,TLSv1.1(...後略)

然後在tomcat.service的Java啟動選項加入:
‑Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" (但不清楚是不是會影響到tomcat網站的tls 1.3連線)

結果無效。
  
2.直接去jre修改/jre/lib/security/java.security,把以下統統mark起來
#jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
#    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
#    include jdk.disabled.namedCurves

好了,JDBC連線字串跟tomcat.service復原回原來也沒問題。
  
由於試了太多次,還被mysql server block了,用以下指令可以解除:
mysqladmin -h 192.168.1.1 -u root -p flush-hosts

ref: