Homerow 是一个 macOS 上的快捷键助手,可以使用类似 [[vimium]] 的操作方式来控制 macOS。
速度快,原生应用,并且还是非常良心的一次性买断制。
这两天一台 VPS 上的 MySQL 总是自己宕机,查看了一下日志发现是因为 OOM ,内存不足被系统 Kill 了。
❯ sudo /etc/init.d/mysqld status
× mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld; generated)
Active: failed (Result: oom-kill) since Mon 2024-05-27 22:23:15 CST; 12h ago
Docs: man:systemd-sysv-generator(8)
Process: 2419860 ExecStop=/etc/init.d/mysqld stop (code=exited, status=0/SUCCESS)
CPU: 1h 11min 53.021s
Notice: journal has been rotated since unit was started, output may be incomplete.
网上稍微查了一下,可以使用修改 syetemd service 的方式来阻止 Linux 因为内存不足而杀死 MySQL。
编辑
sudo systemctl edit mysqld.service
然后在配置文件中添加
[Service]
OOMScoreAdjust=-1000
保存配置文件之后,重启 MySQL
sudo systemctl restart mysqld.service
可以检查配置是否生效,记得替换 MySQL 的 PID。
cat /proc/$(pidof mysqld)/oom_score_adj
MySQL 宕机并出现 “Out of memory” 问题,通常是由于短时间内应用程序大量请求导致系统内存不足,从而触发了 Linux 内核中的 Out of Memory (OOM) killer 机制。OOM killer 会终止某个进程以释放内存给系统使用。
通过检查相关日志文件(/var/log/),可以看到类似的 Out of memory: Kill process 信息:
May 25 19:06:53 wh kernel: [5351539.967422] php-fpm invoked oom-killer: gfp_mask=0x1100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
May 25 19:06:53 wh kernel: [5351539.967429] CPU: 1 PID: 2384831 Comm: php-fpm Not tainted 5.15.0-84-generic #93-Ubuntu
Linux 内核根据应用程序的需求分配内存,通常应用程序分配了内存但未全部实际使用。为提高性能,这部分未用的内存可以被其它进程利用。这种内存归属于每个进程,内核直接回收利用较为复杂,因此采用了内存过度分配(over-commit memory)的策略,以间接提高内存使用效率。一般情况下,这种策略是有效的,但当大多数应用程序同时消耗内存时,问题就出现了。此时,所有应用程序的内存需求加起来超出了物理内存(包括 swap)的容量,内核必须通过 OOM killer 终止一些进程来释放内存,保障系统正常运行。可以通过银行的例子来理解:当部分人取钱时银行能够应对,但如果全国人民同时取钱且都想取完自己的钱,银行实际上无法满足。
内核检测到内存不足并选择终止进程的过程,可以参考内核源代码 linux/mm/oom_kill.c。当系统内存不足时,会触发 out_of_memory()
,然后调用 select_bad_process()
选择一个 “bad” 进程进行终止。选择 “bad” 进程的过程由 oom_badness()
决定,其算法主要根据进程占用的内存量来判断:
/**
* oom_badness - heuristic function to determine which candidate task to kill
* @p: task struct of which task we should calculate
* @totalpages: total present RAM allowed for page allocation
*
* The heuristic for determining which task to kill is made to be as simple and
* predictable as possible. The goal is to return the highest value for the
* task consuming the most memory to avoid subsequent oom failures.
*/
unsigned long oom_badness(struct task_struct *p, struct mem_cgroup *memcg, const nodemask_t *nodemask, unsigned long totalpages)
{
long points;
long adj;
if (oom_unkillable_task(p, memcg, nodemask))
return 0;
p = find_lock_task_mm(p);
if (!p)
return 0;
adj = (long)p->signal->oom_score_adj;
if (adj == OOM_SCORE_ADJ_MIN) {
task_unlock(p);
return 0;
}
points = get_mm_rss(p->mm) + p->mm->nr_ptes + get_mm_counter(p->mm, MM_SWAPENTS);
task_unlock(p);
if (has_capability_noaudit(p, CAP_SYS_ADMIN))
adj -= 30;
adj *= totalpages / 1000;
points += adj;
return points > 0 ? points : 1;
}
理解了这个算法,我们就理解了为什么 MySQL 总是被首当其冲地终止,因为它的内存占用最大。解决这个问题的最简单方法是增加内存,或优化 MySQL 使其占用更少的内存。此外,还可以优化系统以减少内存占用,使应用程序(如 MySQL)能够使用更多内存。一个临时解决方案是调整内核参数,使 MySQL 进程不易被 OOM killer 选中。
可以通过调整内核参数来改变 OOM killer 的行为,避免频繁终止进程。例如,可以在触发 OOM 后立即触发 kernel panic,并在 10 秒后自动重启系统:
# sysctl -w vm.panic_on_oom=1
vm.panic_on_oom = 1
# sysctl -w kernel.panic=10
kernel.panic = 10
# echo "vm.panic_on_oom=1" >> /etc/sysctl.conf
# echo "kernel.panic=10" >> /etc/sysctl.conf
从上面的 oom_kill.c 代码可以看到,oom_badness()
会为每个进程打分,根据分数决定终止哪个进程。可以通过调整进程的 oom_score_adj
参数来控制哪些进程不易被选中终止。例如,如果不希望 MySQL 进程被轻易终止,可以找到 MySQL 的进程号,并将其 oom_score_adj
设置为 -15:
# ps aux | grep mysqld
mysql 2196 1.6 2.1 623800 44876 ? Ssl 09:42 0:00 /usr/sbin/mysqld
# cat /proc/2196/oom_score_adj
0
# echo -15 > /proc/2196/oom_score_adj
当然,如果需要的话,还可以完全禁用 OOM killer(不推荐在生产环境中使用):
# sysctl -w vm.overcommit_memory=2
# echo "vm.overcommit_memory=2" >> /etc/sysctl.conf
Octarine 是一个注重隐私的本地 Markdown 编辑器。
自从我发现并使用Obsidian 以来,我个人已经使用单一 Obsidian Vault 好多年了,我所有的摘录,笔记,Memo,PDF 文档全部都交给了 Obsidian 进行管理。到目前为止,Obsidian 的使用体验也没有任何可以让我放弃的理由。
如果和 Obsidian 比较的话,那么 Octarine 唯一值得一提的就是安装程序的大小,仅有 6 MB 大小,其他的体验,比如所见即所得的编辑器,因为我大部分情况下使用 Markdown,全部的时间都使用 Vim 模式,所以对我来说甚至是一个缺点。而我去 Reddit 官方询问了是否有 Vim 模式的支持,也没有得到正面的反馈。
因为没有 Vim 模式,就这一点,我就需要暂缓考虑 Octarine 了,不过也正是这一点,可以推荐给其他不使用 Vim 模式的朋友。
另外 Octarine 目前还没有插件系统,所以只推荐将其作为一个本地离线的 Markdown 编辑器,或者本地离线的个人知识管理来使用。
微信几乎是每天都会打开使用的 IM,但是这么多年了,我一直以为微信只能一次性发送 9 张图片。日本的五一黄金周出门玩了几天,用相机拍了不少照片,然后在电脑上如果只能 9 张 9 张的发送,那么也太麻烦了。
然后我就想有没有其他方法,当然我自己有我自己的网络相册 EV Photos 的,通过加密的网络相册也能发送,但是有一些还是不想再上传一遍到网络相册,毕竟还是会占用 VPS 空间,然后使用 AirDrop 也是一种方案,但仅限于大家在一起的时候,使用 iCloud 相册分享,有人用 Android,使用 Google Photos 分享,有人上不去,唉。
所以最后还是得在微信里面发送,于是我开始寻找微信有没有什么办法可以一次性发送多张照片,没想到的是,还真有!
在微信里面,可以在个人页面中找到「收藏」,在 macOS 桌面版也是一样,在收藏中点击 + 号,新建笔记,然后在菜单栏中「图片」选项中添加自己想要发送的图片即可。
在这个收藏里面,添加照片的数量和大小是没有限制的,想发多少就可以发送多少,间接地实现了一次性发送多张照片的需求。
把照片全部拖到收藏笔记里面之后,点击笔记右上角的点点点,然后发送给朋友,这样就实现了一次性全部分享。
在笔记中还可以看到图片的数量,如果要转发给多个朋友,创建多个笔记即可。
ProxMobo 是一个第三方的 iOS 上 [[Proxmox VE]] 的管理工具,可以直接在 iOS 上直接对 Proxmox VE 进行查看,管理(停止,重启虚拟机等操作),或者可以直接通过 VNC,或终端对虚拟机进行管理。
功能
管理界面
虚拟机管理界面。
虚拟机详情
PVE 虚拟配置管理
reminders-menubar 是一款 macOS 上的一款极简的 macOS 菜单栏提醒工具。
Reminders MenuBar 是一款使用 SwiftUI 开发的小工具,能够在 macOS 菜单栏查看/提醒待办事项。它体积小、交互简单、界面清爽,支持开机启动、多语言(包括中文)、菜单栏显示计数、快捷键等功能。
Homebrew 安装
brew install --cask reminders-menubar
香港汇丰信用卡在此之前申请一直是需要搬砖进去的,起步就是 10W HKD,但是自 2024 年 3 月起大放水只需在账户内存 1W HKD 即可申请下卡。
权益
年费 1800 HKD,前两年免年费,后续可以拨打客服电话免除。
审核约两周左右的程度,审核完成之后可以收到短信。
在 HSBC HK 应用上可以发现新的信用卡,卡号,有效期,以及安全码(CVV) 。
Apple Pay 绑定不能直接绑定成功,需要联系 HSBC 客服。拨打客服热线 +852 2233 3000,经过身份验证与专业指导,才可以将这张钻石卡放入到 Apple Wallet,实现非接触式支付。
关于客服,可以拨打国内汇丰 4009200828,直接转人工要求转香港汇丰。
实测不论是内地版还是香港版的支付宝、微信支付,当前都无法绑定这张双币钻石卡。若对此类支付方式有强烈需求,建议同步申请汇丰 RED 卡作为补充方案。
只有拿到实体卡片之后,才可以在云闪付进行绑定操作。
需要注意的是,需要使用 HSBC 等级的手机号注册云闪付,并且该云闪付之前不能有其他国内的银行卡。
但幸运的是,美团对这张银联国际卡很友好,成功绑定后,美食与生活服务还有点外卖的支付体验焕然一新。此外,只要将淘宝地区切换至中国大陆以外,也可直接使用该卡进行购物,全球购乐趣无穷。
香港汇丰银联 Pulse 信用卡在大陆的消费姿势
Pulse 卡的返现组成:“基础返现 0.4%”(一定有)+“最红自主奖赏-赏世界 2%”(对于大陆消费来说也等于一定有)+“于中国内地及澳门通过二维码及或流动电话付款独家尊享 2%”(这个得看情况),总共加起来最多是 4.4%的返现,另外还有一些活动(比如 Travel Guru)在这里就不讨论了。返现组成里面的前两项我们不用管,能做的就是让第三项这 2% 能有。
第三项返现通过查看官网的文件,解释如下:要么“使用 Reward+或云闪付 App 之二维码付款功能,于受理银联二维码的商户,透过扫描您的专属付款码或商户的二维码以作付款”,要么“透过已加入合资格信用卡的 Apple Pay、Google Pay 或 Samsung Pay 付款”。
为了能把第三项返现 2% 加上,刷卡的时候可以选择下列 4 种:
有时候没有办法,做不到上面这 4 种付款方式,就只能放弃这 2%返现了。这种情况一般都是在微信小程序里面消费付款,最后调用云闪付 APP 完成的付款,起码也有 2.4%返现。 现实中,也能遇到仅支持微信/支付宝二维码付款的商家,这种没办法了,只能希望银联努力一些把云闪付推广到这些商家。
如果是在内地赚钱获得的都是人民币,其实不是非常推荐申请这张卡,这张卡非常适合在海外赚钱,可以通过香港银行卡收款,但是人在大陆生活的这样一群人。毕竟如果每次都需要通过换汇转账到香港银行卡,那么如果没有特殊的汇款渠道或者因为汇率变动,中间损耗也非常多。另外推荐的一类人群就是,已经在香港银行卡内使用港元定存,或者美元定存,每个月能通过定期存款稳定获得利息的人群。
另外 HSBC 还提供 Red 信用卡,如果人不再大陆生活,那么也推荐居住在海外的用户申请 Red 信用卡。
本文整理分享一些远程工作相关的求职网站和信息分享网站。
社区类表示的这是一个由用户驱动的社区,用户可以自由地在这些社区内分享有用的内容,所以有一些社区也会有专门分享工作机会的板块。
在国内
[[澳大利亚公司]]
[[日本找工作网站]]
访问 Indeed Indeed 页面上我们可以看到:
Glance 是一个可以自行架设的个人 Dashboard 以及 RSS 订阅信息面板。
Glance 由 Go 语言和 JavaScript 实现,前端实现没有使用大的框架,非常简洁。
支持不同的小组件,包括
官方还提供了好几种主题样式。
官方给了一个预设的配置,也可以根据官方的配置自定义。
Fileball 是一款 iOS,tvOS 上的本地文件管理器,本地音乐播放器,本地视频播放器,以及文本编辑器,Fileball 可以在 iPhone,iPad,Apple TV 上使用。Fileball 可以连接网络共享,支持 SMB,FTP,SFTP,Synology,NFS,WebDAV 等,支持 Emby,Jellyfin 等,还可以连接百度网盘,Box,Dropbox,Google Drive,OneDrive,pCloud 等,可以作为 [[Infuse]] ,[[VidHub]] 等播放器的平替,高级版本价格也比较合适。Fileball 也支持 [[IPTV]]。
之前有写文章说我购买了一台 Apple TV,Fileball 那个时候就安装了,虽然平时使用还是 VidHub 比较多,毕竟还是有一个海报墙,但是 Fileball 作为一款文件管理器还是经常被想起来。
Fileball 原来叫做 Filebox,收到商标侵权投诉修改为 Fileball。
Fileball 不仅能作为一个功能强大的媒体播放器,也支持文件管理,IPTV 网络流等功能。
Fileball 支持的协议和网盘非常多。
支持的网盘
支持的协议
支持的媒体服务器
Fileball 另外的一个优点是它还可以作为一个音乐播放器,我自己测试一下之后,flac 等等格式都是可以正常播放。
Fileball 相较于当前两个比较热门的应用 Infuse 和 VidHub 也有一些致命的缺点。
另外一些高阶的功能是收费的。
Fileball 高级版提供
目前一次性收费 9.99 USD,折扣价格 6.99 USD;人民币 68 元,折扣价是 48 元。
2024 年上线三周年加上五月一号假期,所以折扣 48 RMB,美区 6.99 USD。