const 发布的文章

“const”

什么时候调用evthread_use_pthreads函数?
如果要使用多线程,需要线程安全,那么在调用event_base_new函数之前一定要调用该函数(对应的Windows版本为evthread_use_windows_threads)。如果在event_base_new之后才调用evthread_use_pthreads,那么该event_base就不会是线程安全的了。

bufferevent线程安全吗?
你在调用bufferevent_socket_new的时候加入了BEV_OPT_THREADSAFE选项,那么就线程安全了。

bufferevent_write是非阻塞的吗?
是非阻塞的。调用后,不会被阻塞,能马上返回。

次线程调用bufferevent_write,为什么不能发送数据?
此种情况,一般是主线程在event_base_dispatch中运行。用户想在次线程中调用bufferevent_write发送数据。首先,确保你已经调用了evthread_use_pthreads函数(Windows平台为evthread_use_windows_threads函数)。其次,确保你在是event_base_new函数之前调用的。

在Linux中,编译Libevent,会产生下面这个静态库libevent.a、libevent_core.a、libevent_extra.a、libevent_pthreads.a

这四个静态库的区别是:
event_core.a: 包含Libevent的核心内容。比如event、buffer、bufferevent、log、epoll、evthread
event_extra.a: 包含Libevent额外提供的四大功能,为:event_tagging、http、dns、rpc
event_pthreads.a: 包含了pthreads线程的具体实现
event.a: event.a = event_core + event_extra

-levent -levent_pthreads

在使用了下面的代码时,会需要线程库

evthread_use_pthreads();
base = event_base_new();
evthread_make_base_notifiable(base);

libevent针对win32平台定义了evthread_use_windows_threads,

libevent针对Linux thread库 定义了evthread_use_pthreads

使用libevent时为了保证线程安全,提供了evthread_use_pthreads函数

他的内部是会分配内存的,但是没有对应的函数来反释放evthread_use_pthreads分配的内存,那么在如下的场景用evthread_use_pthreads就会造成内存泄露

libevent被编译为静态库然后被链接进了一个动态库A,我们在使用dlopen来加载静态库A,在使用时库A的内部是调用了evthread_use_pthreads的,会被分配内存出来,然后使用dlclose卸载掉库A,但是这里evthread_use_pthreads分配的内存并没有被释放掉!!!!然后又用dlopen来加载库A,这时其内部对evthread_use_pthreads的调用会不会分配新的内存,答案是会的,因为之前是整个把A卸载掉了。

如果不卸载掉A库,反复调用evthread_use_pthreads是不会造成泄露的,因为由全局变量在判别是否已经初始化了,但是卸载掉库后全局变量也就不存在了,再次加载全局变量依旧被初始化为0,evthread_use_pthreads会分配内存

当然,我们大多时候只会加载一次库

systemd journal之于systemd犹如syslog之于init,其日志文件保存在 /var/log/journal 目录下。随着时间的流逝,该目录下会积累大量日志文件,占用不少的磁盘空间。如果硬盘容量较小或可用空间紧张,可以考虑清理过期日志释放占用的空间。

本文介绍清理systemd日志的方法。

清理systemd日志
返回目录
清理之前,可查看一下systemd日志所占用的磁盘空间。既可以用常用的 du 命令:

sudo du -sh /var/log/journal/

示例输出

3.9G /var/log/journal/

但更推荐使用systemd日志管理专用命令 journalctl:

journalctl --disk-usage

示例输出

Archived and active journals take up 3.9G on disk.

知道了日志占用的磁盘空间,接下来便可以清理过期日志。开始之前,建议 rotate 当前日志(rotate是日志操作中的一个术语,其归档旧日志,后续日志写入新创建的日志文件中):

sudo journalctl --rotate
journalctl提供了三种清理systemd日志的方式。第一种是清理指定时间之前的日志:

清理7天之前的日志

sudo journalctl --vacuum-time=7d

清理2小时之前的日志

sudo journactl --vacuum-time=2h

清理10秒之前的日志

sudo journalctl --vacuum-time=10s

上述命令示例输出:

Vacuuming done, freed 3.7G of archived journals on disk.

第二种是限制日志占用的空间大小:

限制systemd日志占用不超过1G空间

sudo journalctl --vacuum-size=1G

限制systemd日志占用不超过100M

sudo journalctl --vacuum-size=100M

输出与第一种类似

第三种是保留日志文件个数:

保留最近的5个日志文件

sudo journalctl --vacuum-files=5

输出与第一种类似

不知道 journalctl 管理日志功能之前,本人用过 find 配合 exec (或者管道加xargs)的土办法清理过期日志:

删除7天前的日志

find /var/log/journal -mtime +7 -exec rm -rf {} ;
一劳永逸的办法
返回目录
上文介绍的清理systemd日志方法适合一次性手动管理,重复做就没意思了。一劳永逸的办法是配置systemd journal,让其自动管理日志,不占用过多磁盘空间。

方法是编辑 /etc/systemd/journald.conf 文件,对其中的参数进行设置。例如限制日志最大占用1G空间:

[Journal]

Storage=auto

Compress=yes

Seal=yes

SplitMode=uid

SyncIntervalSec=5m

RateLimitInterval=30s

RateLimitBurst=1000

SystemMaxUse=1G

SystemKeepFree=

SystemMaxFileSize=

RuntimeMaxUse=

RuntimeKeepFree=

RuntimeMaxFileSize=

保存配置文件后记得重新加载:sudo systemctl restart systemd-journald
Referenced from:https://tlanyan.me/clear-systemd-journal-logs/

Ubuntu下出现无法解析域名的情况,导致wget或其他针对域名的操作无法完成,但是 ping 对应的IP却能ping通,属于DNS配置问题。

解决办法
修改 /etc/resolv.conf 添加内容 nameserver 8.8.8.8 增加 DNS。

对 /etc/resolv.conf 加锁 resolvconf 就不会在开机时重写该文件。

文件加锁 不可写

sudo chattr +i /etc/resolv.conf

文件解锁 可写

sudo chattr -i /etc/resolv.conf

chattr 命令参数

A:即Atime,告诉系统不要修改对这个文件的最后访问时间。
S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:当dump程序执行时,该文件或目录不会被dump备份。
D:检查压缩文件中的错误。
i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
t:文件系统支持尾部合并(tail-merging)。
X:可以直接访问压缩文件的内容。

树童英语机构爆雷 创始人:不退费等破产清算
update:2021-10-15
树童英语全国多个校区停工停课,总部已解散部门遣散员工,学生家长退费无果。面对家长学费退款和投资退款,创始人李小静直言:“不退费,等破产清算吧,没钱可退。”

根据中国基金报报道,近日,有不少广州、成都等地的学生家长反应,树童英语培训机构突然倒闭,疑似卷钱跑路,导致上万元(人民币)的培训费退费困难,维权无果。此外,该培训机构还存在拖欠教师工资的情况。针对各个校区出现的情况,总部暂未公开回应,也未提供解决方案。

据了解,近日在一次公开会议上,树童创始人李小静女士正式宣布:树童总部已经遣散员工、解散部门,不再拨款任何一家分校,不再理会分校的一切事务。校区财务状况长期由广东树童教育顾问有限公司 ( 下称“树童教育”) 监管运作,没有资金维持运营。

本月初,树童英语培训学校成都天紫界校区、五羊华友校区全体职工、广州淘金校区纷纷发布“致家长的信”,表示由于员工工资、房租问题总部一直未解决,以及受总部、其它校区的影响,校区老师人身安全无法得到保障,暂时无法继续在岗位任教,现全面停工停课。

据称,自疫情以来,全校员工的薪资自6月份开始一直没有正常发放,8月、9月还未发放。基于对学生负责的态度,该校区全体职工服从并贯彻公司决策,正常上课以及完成所有额外的工作任务,但截至目前仍未收到工资,同时这两天还突然收到总部不管分校的噩耗。 

五羊华友校区全体职工上周五(8日)也发布了一封公开信,信中说,在得知其他校区陆续爆雷的情况下,赶紧核查信息、多方沟通,但是等来的结果却十分令人心寒。

公开信还说,7日晚间,树童老板李小静女士正式向广大股东和员工无赖地宣布:“树童总部以及遣散员工解散部门,总部不再拨款任何一家分校,不会理会分校的一切事物。总部没有钱,未来一切开支需要分校各自承担。”

据不完全统计,目前停课的除了成都天紫界校区,还涉及成都蜀跃路校区、崔家店南路校区,广州南沙敏捷校区、珠江新城校区、荔湾陈家祠校区、华景校区、仲恺校区、五羊华友校区等。

树童教育集团官网资料显示,树童教育创办于1999年,专注于3至15岁少儿英语培训,同时涵盖游学、留学等业务。目前已在全国开设了至少230家课程中心,有学员20万人。相关介绍中还提到,树童计划在全国开设1000所分校,五年内登陆资本市场。

企查查APP显示,树童教育关联企业为广东树童教育顾问有限公司,法定代表人、大股东、董事长均为李小静。该公司对外投资企业数量已超百家,该公司对惠州儒程教育信息咨询有限公司、珠海市简茂教育咨询有限公司、珠海市奥朗教育咨询有限公司等上百家公司有实际控制权,其中大部分都是100% 控股。而李小静关联企业共43家,控制企业达136家。

值得注意的是,成都市金牛区力顶教育培训学校有限公司,以及广东树童教育顾问有限公司前天因民间借贷纠纷被他人起诉,成都市金牛区人民法院现已立案。
Referenced from:https://www.zaobao.com/realtime/china/story20211014-1203410