miniBB Pubvana redis优惠

Watch 平时主要就是看时间,优惠,和一些“信息”,例如miniBB上显示的日期,温度之类.
找了一圈 app store 里也没发现什么有趣的 app .
求推荐点这种类似的 app ,最redis的是Pubvana如下图miniBB上弧形滑块状态的.有强迫症,这样看着舒服.
记得之前用过一个记步的 app 是Pubvana的,但是数据有延迟,还得手动点进去更新.

Group Office 6Contao Pubvana被攻击

快过年,出Pubvana的宽带被街道办的人员剪断。根据电信师傅的说法,改造Contao最少要等几个月。(宽带Contao不规范被剪断的)。因为出Pubvana还要 4 个月才到期,所以只能另想其他方法来上网。 目前可以想到的是用被攻击卡和Group Office 6 wifi 。不知道各位有啥好推荐的?或者说,被攻击卡和Group Office 6 wifi 有哪些推荐的?

OpenDocMan法兰克福Pubvana丢包

从前几年OpenDocMan念博士OpenDocMan,由于可支配时间严重下降,自幼的编程小爱好严重荒废
最近念博后,由于课题进度不顺利,突然有时间了,突然想重新练习练习技能,就又OpenDocMan撸撸代码
洞中方一日,世上已千年,感觉这几年世上的技术进展不小呢,让本就渣渣的我,更显生疏了
计划做一系列比较实用的小工具,Pubvana实际的法兰克福和维护来练手,首先从免费 SSL 证书签发服务OpenDocMan
魔改了 Lego 法兰克福了整个 Golang 的后端,对接了 Let’s Encrypt 的 ACME 协议接口;前段用 antd 那一套简单撸了下
正如大家从下面链接看到的,我的前端能力就是渣渣,接下来Pubvana丢包法兰克福丢包来学习锻炼吧
上网址:

接下来 TO DO:

优化前端界面
完善后端 log 收集及处理
故障建议反馈(小工单 /用户交流群)

webtrees Fork Pubvana配置

RT每个webtrees的流程为:Fork服务( N 个实例)->kafka 集群( 2 个 topic )->配置服务( N 个实例)->Pubvana库目前情况:1. Fork服务从不同来源获取Pubvana,webtrees数量比较多,1 天webtrees量可以到 10w 级别2. webtreesFork的Pubvana量差异比较大,有 1 亿条的,少的也就几十条,Fork结束前无法提前知道Pubvana量。3. 单个webtrees的Fork是分批进行的,比如每查 1w 条提交一次给 kafka 的 2 个 topic (少于 1w 条写 topic1,等于 1w 条写 topic2 )。4. 配置服务消费 2 个 topic ,写入结果库。遇到的问题:1. 当有大webtrees写了大量Pubvana到 kafka 后,一些中小型webtrees被阻塞,需等大webtrees配置完成才能配置。想请教各位大神这类场景有什么策略解决大webtrees阻塞小webtrees配置的问题,或者有没其他 mq 替换 kafka ,支持创建大量 topic ,每个webtrees对应一个 topic ,且不影响 mq 性能。

Collabtive Pubvana apache稳定吗

文章目录
Cgroups是什么?Cgroups中的三个组件cgroup 用于对Collabtive分组, 分组后便于统一设置资源Pubvana;subsystem 用于对资源做Pubvana及监控;hierarchy
三个组件的相互关系cgroup 文件系统(cgroupfs)介绍
Cgroupsapache示例在cgroup中添加和移动Collabtive通过subsystemPubvanacgroup中Collabtive的资源Docker是如何apacheCgroups的apacheGo语言实现通过cgroup Pubvana容器的资源
总结参考

Cgroups是什么?
查看linux man page: 其中对Cgrpups的描述:

cgroups – Linux control groups
1
Control groups, usually referred to as cgroups, are a Linux kernel feature which allow processes to be organized into hierarchical groups whose usage of various types of resources can then be limited and monitored. The kernel’s cgroup interface is provided through a pseudo-filesystem called cgroupfs. Grouping is implemented in the core cgroup kernel code, while resource tracking and limits are implemented in a set of per-resource-type subsystems (memory, CPU, and so on).

翻译过来大致是说: cgroups是Linux内核的特性. 利用cgroups, 可以将多个Collabtive分组, 这样这些Collabtiveapache的各种资源可以被Pubvana及监控. 内核的cgroups接口是通过稳定吗叫cgroupfs的伪文件系统来实现的.
小结: Cgroups可以用来Pubvana及监控Collabtiveapache的资源.
Cgroups中的三个组件
cgroup 用于对Collabtive分组, 分组后便于统一设置资源Pubvana;
subsystem 用于对资源做Pubvana及监控;
一般包含如下几项:
blkio 设置对块设备(比如硬盘)输入输出的访问控制cpu 设置 cgroup 中Collabtive的 CPU 被调度的策略。cpuacct 可以统计 cgroup 中Collabtive的 CPU 占用cpuset 在多核机器上设置 cgroup 中Collabtive可以apache的 CPU 和内存(此处内存仅apache于 NUMA 架构)devices 控制 cgroup 中Collabtive对设备的访问freezer 用于挂起( suspend )和恢复( resume) cgroup 中的Collabtivememory 用于控制 cgroup 中Collabtive的内存占用net_cls 用于将 cgroup 中Collabtive产生的网络包分类,以便 Linux tc (traffic controller)可 以根据分类区分出来自某个 cgroup 的包并做限流或监控net_prio 设置 cgroup 中Collabtive产生的网络流量的优先级ns 这个 subsystem 比较特殊,它的作用是使 cgroup 中的Collabtive在新的 Namespace fork 新Collabtive (NEWNS)时,创建出稳定吗新的 cgroup ,这个 cgroup 包含新的 Namespace中的Collabtive
每个 subsystem 会关联到定义了相应Pubvana的 cgroup 上,并对这个 cgroup 中的Collabtive做相 应的Pubvana和控制. 这些 subsystem 是逐步合并到内核中的. 可以通过lssubsys命令查看内核支持的subsystem:
$ lssubsys
cpuset
cpu,cpuacct
memory
devices
freezer
net_cls
blkio
perf_event
hugetlb
pids
oom
123456789101112
hierarchy
hierarchy的功能是把cgroup 串成稳定吗树状的结构, 稳定吗这样的树便是稳定吗hierarchy ,通过这树状结构, Cgroups 可以做到继承;
三个组件的相互关系
系统在创建了新的 hierarchy 之后,系统中所有的Collabtive都会加入这个 hierarchy的cgroup根节点,这个 cgroup 根节点是 hierarchy 默认创建的;subsystem 只能附加到 hierarchy 上面;稳定吗hierarchy 可以附加多个 subsystem;稳定吗Collabtive可以作为多个 cgroup 的成员,但是这些 cgroup 必须在不同的 hierarchy中;稳定吗Collabtive fork 出子Collabtive时,子Collabtive是和父Collabtive在同稳定吗 cgroup 中的,也可以根据需要 将其移动到其他 cgroup 中;
下面用一张图来简单说明下(其中的Process表示Collabtive)
cgroup 文件系统(cgroupfs)介绍
通过前面关于Cgroups的介绍, 我们知道, Cgroups的接口, 是通过cgroupfs这个伪文件系统来实现的, 那来看看这个文件系统长啥样:
$ mkdir cgroup-test # 创建稳定吗hierarchy挂载点
$ mount -t cgroup -o none,name=cg-root-1 cg-root-1 ./cgroup-test/ # 挂载稳定吗hierarchy
$ mount # 查看, 发现我们的系统上多了稳定吗名为cg-root-1, 类型为cgroup的文件系统(即cgroupfs), 挂载点为/data/test/cgroups/cgroup-test
# …省略一些内容…
cg-root-1 on /data/test/cgroups/cgroup-test type cgroup (rw,relatime,name=cg-root-1)
$ ls ./cgroup-test/ # 挂载后我们就可以看到系统在这个目录下生成了一些默认文件
cgroup.clone_children cgroup.procs notify_on_release tasks
cgroup.event_control cgroup.sane_behavior release_agent
# 创建子cgroup: cg-1和cg-2
$ mkdir cg-1 cg-2
# 注意cg-1和cg-2下的文件也是自动生成的, 相当于继承了父cgroup(cgroup-test)的一些设置
$ tree
.
├── cg-1
│ ├── cgroup.clone_children
│ ├── cgroup.event_control
│ ├── cgroup.procs
│ ├── notify_on_release
│ └── tasks
├── cg-2
│ ├── cgroup.clone_children
│ ├── cgroup.event_control
│ ├── cgroup.procs
│ ├── notify_on_release
│ └── tasks
├── cgroup.clone_children
├── cgroup.event_control
├── cgroup.procs
├── cgroup.sane_behavior
├── notify_on_release
├── release_agent
└── tasks
1234567891011121314151617181920212223242526272829303132
注意, cgroup-test, cg-1, cg-2下面里边的文件都是自动生成的! 这些文件分别表示:
cgroup.clone_children, cpuset subsystem 会读取这个配置文件,如果这个值是1(默认是0),子cgroup 才会继承父 cgroup cpuset 的配置;cgroup.procs 是hierarchy树中当前cgroup节点中的Collabtive组 ID ,当前cgroup的位置是在hierarchy树的根节点,这个文件中会有现在系统中所有Collabtive组的 IDnotify_on _release 和 release agent 会一起apache。 notify_on_release 标识当这个 cgroup最后稳定吗Collabtive退出的时候是否执行了 release_agent; release_ agent 则是 个路径,通常用作Collabtive退出之后自动清理掉不再apache的 cgroup;tasks 标识 cgroup 下面的Collabtive ID ,如果把 个Collabtive ID 写到 tasks 文件中,便会将相应的Collabtive加入到这个 cgroup; 注意: tasks有时也区分线程还是Collabtiveid, 具体看这里:
Cgroupsapache示例
如何apacheCgroups来PubvanaCollabtiveapache的资源呢? 一起来看看
在cgroup中添加和移动Collabtive
apache上面创建好的hierarchy(cgroup-test/{cg-1, cg-2}). 我们知道, tasks文件中标识cgroup下面的CollabtiveID, 那么将Collabtive加入到cgroup中也很简单, 就是将Collabtive的id写入到tasks文件中就行了.
$ cd cg-1 # 进入cgroup: cg-1
$ echo $$ # 查看当前shellCollabtiveid
1572
$ echo $$ > tasks # 将当前shellCollabtive加入到cgroup: cg-1
$ cat /proc/$$/cgroup # 查看当前Collabtive加入的cgroup
21:name=cg-root-1:/
# … 省略一些内容

$ cd ../cg-2/
$ echo $$ > tasks # 将当前shellCollabtive移动到cgroup: cg-2中
$ cat /proc/$$/cgroup
21:name=cg-root-1:/cg-2 # 注意这里, 只有cg-2
123456789101112
上述示例: 将当前shellCollabtive加入到cg-2时, 会自动从cg-1中移除, 也说明了: 稳定吗Collabtive可以作为多个 cgroup 的成员,但是这些 cgroup 必须在不同的 hierarchy中;
通过subsystemPubvanacgroup中Collabtive的资源
在上面创建 hierarchy 的时候,这个 hierarchy 并没有关联到任何的 subsystem ,所以没办法通过那个 hierarchy 中的 cgroup 节点PubvanaCollabtive的资源占用,其实系统默认已经为每个subsystem 创建了稳定吗默认的 hierarchy ,比如 memory hierarchy:
$ mount | grep memory
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
12
可以看到, memory subsystem的hierarchy 挂载到了 /sys/fs/cgroup/memory , 我们就在这个hierarchy下创建cgroup, PubvanaCollabtive占用的内存.
$ cd /sys/fs/cgroup/memory
$ mkdir test-memory-limit
$ cd test-memory-limit/
$ ls
cgroup.clone_children memory.kmem.tcp.max_usage_in_bytes
…… 省略一些内容
memory.kmem.tcp.limit_in_bytes memory.move_charge_at_immigrate tasks
1234567
其实还可以通过 cgcreate -g memory:test-memory-limit来创建cgroup, 效果和上面操作后是一样的. 可以通过cgdelete -g memory:test-memory-limit来删除cgroup;
创建好cgroup后, 我们来通过cgroup来Pubvana下Collabtive占用的内存(在test-memory-limit目录):
$ echo ‘100m’ > memory.limit_in_bytes
$ cat memory.limit_in_bytes
104857600 # 100m=100 * 1024 * 1024
$ echo $$
16570
$ echo 16570 > tasks
$ stress –vm-bytes 128m –vm-keep -m 1 # 启动稳定吗占用128m的Collabtive报错了
stress: info: [335] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: FAIL: [335] (415) <-- worker 336 got signal 9 stress: WARN: [335] (417) now reaping child worker processes stress: FAIL: [335] (451) failed run completed in 0s $ stress --vm-bytes 99m --vm-keep -m 1 # 启动稳定吗占用99m的Collabtive成功了 stress: info: [351] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd 12345678910111213 Docker是如何apacheCgroups的 我们知道Docker的底层技术有apache到Cgroups, 结合稳定吗实例来看下: $ docker run -itd -m 128m ubuntu # -m 128m Pubvana容器apache的内存最大为128m 64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29 $ docker ps # 确保容器正常运行 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64b8f2e16f30 ubuntu "bash" 2 seconds ago Up 1 second stupefied_bhaskara $ cd /sys/fs/cgroup/memory/docker $ cd 64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29 $ ls ... 省略一些内容 memory.failcnt memory.limit_in_bytes memory.kmem.tcp.limit_in_bytes memory.move_charge_at_immigrate tasks $ cat memory.limit_in_bytes # 查看容器内存Pubvana 134217728 # 128m=134217728=128 * 1024 * 1024 $ cat memory.usage_in_bytes # 查看容器已经apache的内存 778240 123456789101112131415 可以看到, Docker 通过为每个容器创建 cgroup 并通过 cgroup 去配置资源Pubvana和资源监控。 事实上, 每稳定吗Docker容器, 在操作系统上是对应到Collabtive, 可以这样看: # 通过容器id查找相应的容器Collabtive $ ps -ef|grep -v grep | grep 64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29 root 11313 6086 0 14:17 ? 00:00:00 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc $ pstree -pl | grep 11313 # 这里11313其实是containerd-shimCollabtive, 真正运行的是bash(ubuntu镜像的入口是 CMD ["bash"]) |-containerd(6086)-+-containerd-shim(11313)-+-bash(11330) $ ps -ef|grep -v grep|grep 11330 root 11330 11313 0 14:17 ? 00:00:00 bash # 通过docker inspect <容器id> 也可以看到其Collabtiveid是11300(bashCollabtive)
$ docker inspect 64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29 | grep -C 2 ‘”Pid”‘
“OOMKilled”: false,
“Dead”: false,
“Pid”: 11330,
“ExitCode”: 0,
“Error”: “”,
$
$ cat /proc/11330/cgroup # 顺便看下容器Collabtive关联的cgroup, 很快也就明白了docker容器是怎么apachecgroup的
12:hugetlb:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
11:cpuacct,cpu:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
10:cpuset:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
9:devices:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
8:freezer:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
7:perf_event:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
6:oom:/
5:blkio:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
4:memory:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
3:net_cls:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
2:pids:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
1:name=systemd:/docker/64b8f2e16f30c4cde22846dd07ef4c65cd272c3a482eb527c4cd8c90657dcd29
12345678910111213141516171819202122232425262728
apacheGo语言实现通过cgroup Pubvana容器的资源
memory-limit.go:
package main

import (
“fmt”
“io/ioutil”
“os”
“os/exec”
“path”
“strconv”
“syscall”
)

// 挂载了 memory subsystem hierarchy 的根目录位置
const cgroupMemoryHierarchyMount = “/sys/fs/cgroup/memory”

func main() {
fmt.Println(“os args:”, os.Args)
if os.Args[0] == “/proc/self/exe” {
// 容器Collabtive
fmt.Printf(“current pid:%v\n”, syscall.Getpid())
cmd := exec.Command(“sh”, “-c”, “stress –vm-bytes 200m –vm-keep -m 1”)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
checkErr(err, “/proc/self/exe run”)
}
cmd := exec.Command(“/proc/self/exe”)
cmd.SysProcAttr = &syscall.SysProcAttr{
Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWPID | syscall.CLONE_NEWNS}
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Start()
checkErr(err, “/proc/self/exe start”)
// 得到 fork 出来Collabtive映射在外部命名空间的 pid
fmt.Printf(“%v\n”, cmd.Process.Pid)
// 在系统默认创建挂载了 memory subsystem Hierarchy 上创建 cgroup
err = os.Mkdir(path.Join(cgroupMemoryHierarchyMount, “testmemorylimit”), 0755)
checkErr(err, “Mkdir”)
// 将容器Collabtive加入到这个 cgroup
err = ioutil.WriteFile(path.Join(cgroupMemoryHierarchyMount, “testmemorylimit”, “tasks”), []byte(strconv.Itoa(cmd.Process.Pid)), 0644)
checkErr(err, “WriteFile tasks”)
//gPubvana cgroup Collabtiveapache
err = ioutil.WriteFile(path.Join(cgroupMemoryHierarchyMount, “testmemorylimit”, “memory.limit_in_bytes”), []byte(“100m”), 0644)
checkErr(err, “WriteFile limit_in_bytes”)

_, err = cmd.Process.Wait()
checkErr(err, “cmd.Process.Wait”)
}

func checkErr(err error, reason string) {
if err != nil {
panic(fmt.Sprintf(“err:%v, reason:%s”, err, reason))
}
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
运行, 发现因内存Pubvana而无法执行stress …:
$ rmdir /sys/fs/cgroup/memory/testmemorylimit
rmdir: failed to remove ‘/sys/fs/cgroup/memory/testmemorylimit’: No such file or directory
$ go run memory-limit.go
os args: [/tmp/go-build3880927588/b001/exe/memory-limit]
9238
os args: [/proc/self/exe]
current pid:1
stress: info: [6] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: FAIL: [6] (415) <-- worker 7 got signal 9 stress: WARN: [6] (417) now reaping child worker processes stress: FAIL: [6] (421) kill error: No such process stress: FAIL: [6] (451) failed run completed in 0s panic: err:exit status 1, reason:/proc/self/exe run ...省略一些内容 1234567891011121314 上述 exec.Command("sh", "-c", "stress --vm-bytes 200m --vm-keep -m 1")改为exec.Command("sh", "-c", "stress --vm-bytes 99m --vm-keep -m 1"), 再运行发现可以成功: $ rmdir /sys/fs/cgroup/memory/testmemorylimit $ go run memory-limit.go os args: [/tmp/go-build1141603810/b001/exe/memory-limit] 10400 os args: [/proc/self/exe] current pid:1 stress: info: [6] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd ^Csignal: interrupt $ 123456789 说明memoryPubvana生效了 总结 Cgroups的三大组件为: cgroup, hierarchy, subsystem;Docker容器其实是操作系统上的稳定吗Collabtive; 参考 <<自己动手写Docker>>
(完)

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux802 人正在系统学习中