云服务器很多dbus进程
‘壹’ 云服务器遇到DDOS,怎么办
购买一个防护设施,腾讯云的大禹还不错
‘贰’ 如何高效率的使用DBUS作client/server架构
在嵌入式系统中使用dbus主要有两个方面的用途:
1:进程间通信
2:实现client/server模式;
2也是1的具体表现形式;
包括dbus自带的例子,都是采用dbus对数据的封装,实现client/server模式的,
缺点有二:
1 一个API要定义一个xml接口描述
2 数据封装非常复杂,非常不利于以后接口的扩展;
为了客服上面的缺点,提高可扩展性和效率,可以这样做:
如果一个应用分为client,server两端的话,要高效率的实现client/server之间
的通信,可以采用如下方式:
第一步:定义一个通用的API xml 接口描述,暂命令为dbus_general.xml
<?xml version="1.0" encoding="UTF-8" ?>
<node name="/org/freedesktop/DBus/General_api">
<interface name="org.freedesktop.DBus.general_api">
<method name="client_request">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="__client_request_cb"/>
<arg type="i" name="action_id" direction="in" /> //这个地方就是不同API的ID
<arg type="i" name="input_int" direction="in" /> //这个参数可以用,也可以不用
<arg type="ay" name="input_garray" direction="in" /> //这个Garray用来从client传递数据,包括复杂的数据结构到server
<arg type="i" name="outut_int" direction="out" /> //这个可以用,也可以不用
<arg type="ay" name="output_garray" direction="out" /> //这个Garray用来从server侧传回数据到client侧
<arg type="i" name="result" direction="out" />
</method>
</interface>
</node>
大家知道:在dbus文档中有这么的描述,
ay | Array of bytes | DBUS_TYPE_G_BYTE_ARRAY | GArray * |g_array_free
大家都不常用字节数组(GArray),大家常用的是integar,string等;
这个通用的模板关键之处就是这个Garray, Garray本身是个容器,这个
容器里面可以装任何东西。
我们就是利用这个GArray来实现client与server之间数据的传递,无论想传递
什么要的数据;
第二步:用dbus的工具函数生成stub/proxy头文件,这一步写到Makefile脚本中,以后不用修改了;
dbus-binding-tool --mode=glib-server --prefix=your_mole_name dbus_general.xml > general_stub.h
dbus-binding-tool --mode=glib-client --prefix=your_mole_name dbus_general.xml > general_proxy.h
生成的头文件,大家一般不要动它们,直接使用就可以了;
general_proxy.h:
.....
client_request (DBusGProxy *proxy, const gint IN_action_id, const gint IN_input_int, const GArray* IN_input_garray, gint* OUT_output_int, GArray** OUT_output_garray, gint* OUT_result, GError **error)
{
return dbus_g_proxy_call (proxy, "request", error, G_TYPE_INT, IN_action_id, G_TYPE_INT, IN_input_int, dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR), IN_input_garray, G_TYPE_INVALID, G_TYPE_INT, OUT_output_int, dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR), OUT_output_garray, G_TYPE_INT, OUT_result, G_TYPE_INVALID);
}
.....
general_stub.h:
.....
#include <dbus/dbus-glib.h>
static const DBusGMethodInfo dbus_glib_your_mole_name_methods[] = {
{ (GCallback) __client_request_cb, dbus_glib_marshal_your_mole_name_BOOLEAN__INT_INT_BOXED_POINTER_POINTER_POINTER_POINTER, 0 },
};
const DBusGObjectInfo dbus_glib_your_mole_name_object_info = {
0,
dbus_glib_your_mole_name_methods,
1,
"org.freedesktop.DBus.general_api/0client_request/0S/0action_id/0I/0i/0input_int/0I/0i/0input_garray/0I/0ay/0output_int/0O/0F/0N/0i/0output_garray/0O/0F/0N/0ay/0result/0O/0F/0N/0i/0/0/0",
"/0",
"/0"
};
......
第三步:实现client侧,主要是直接调用general_proxy.h的接口函数client_request(),用GArray传入你的数组(可以携带任何你自己定义的数据结构)
gboolean proxy_func1 (void)
{
int api_id = 0; //这个在不同的proxy_func里面可以有不同的值,主要是区分函数作用
GArray* in_array = NULL;
GArray* out_array = NULL; //在这里不用分配内存,放在server侧做内存分配
in_array = g_array_new(FALSE, FALSE, sizeof(guint8));
if (!in_array)
return FALSE;
//把你自己的数据封装到in_array中,假设你的数据结构是your_strcut_t
your_struct_t my_own_data;
//fill my_own_data
...
//放到in_array中,这很关键
g_array_append_vals(in_array, my_own_data, sizeof(your_strcut_t));
//调用general_proxy.h中的dbus接口
client_request(dbus_proxy, api_id, in_array, &out_array, .....); //通过dbus把数据从到server侧,server侧如何处理,看第四步;
//当sever返回数据后,从out_array中取出来就可以了
your_strcut_t* g_array_data = (your_strcut_t*)out_array->data;
.....
//free
if (in_array)
g_free (in_array);
if (out_array)
g_free (out_array);
....
}
第四步:实现Server侧,主要是实现general_stub.h中的函数__client_request_cb();
//这个函数的参数很长,除了第一个参数是server对象外,其余的参数可以直接从
general_proxy.h对应的接口参数拷贝过来;应该这个函数和proxy的接口是一对!
gboolean
__client_request_cb (ServerObject *server_object, const gint IN_action_id, const gint IN_input_int, const GArray* IN_input_garray, gint* OUT_output_int, GArray** OUT_output_garray, gint* OUT_result, GError **error)
{
*OUT_output_garray = g_array_new(FALSE, FALSE, sizeof(guint8));//在client侧没有分配内存,server这里一定要分配
//卸下client侧传递过来的数据
your_strcut_t ×p_data= (your_strcut_t *)&g_array_index(input_garray,your_strcut_t, 0);
//对卸下的数据进行处理,看你的程序做什么功能了:)
.....
.....
//如果要传回数据到client侧,假设处理过的数据为:your_strcut_t dealed_with_data
g_array_append_vals(*output_garray, &dealed_with_data, sizeof(your_strcut_t));
return TRUE;//一定要返回TRUE,否则client侧收不到数据的;
}
上述通用步骤中,1,2在今后的扩展中,是不要要改的,尤其是第一步,dbus的xml接口描述非常
麻烦;如果为每个API自己去定义xml接口描述,搞不好,client和server之间不通;而且,一段时间
后,不看dbus的文档,就会忘记如何写其xml接口;所以做个通用的xml接口描述很省事;
3,4是client/server侧的各自实现,结构是钉死的,不用改多少;一个函数如此,N个函数也是这样;
如果你有30个函数,要分别实现它们吗?不必要,只要给各自的函数定义其ID就行;
在client/server侧的函数里面搞个switch-case结构就分开了;
架构定好了,传递数据也非常方便,比dbus自己的dbus_g_type_struct_set效率高的多,目前开源软件
多用dbus_g_type_struct_set,效率很低,对于传递批量数据,效率很低;
如果大家对于如何提高dbus传递消息/数据的效率,有什么更好的看法,欢迎交流。
参考:
一位网友写的dbus的基础的使用,写的不错,大家可以参考:
http://blog.csdn.net/yuhang111/archive/2007/08/27/1760141.aspx
另外,dbus的根源在:
http://www.freedesktop.org/wiki/Software/dbus,这里是dbus project的宿主地址,
‘叁’ Ubuntu里python dbus是什么软件包
D-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用GPL许可证发行。D-Bus最主要的用途是在Linux桌面
环境为进程提供通信,同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。D-Bus的主要概率为总线,注册后的进程可通过总线接收或传
递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。目前,D-Bus已被大多数Linux发行版所采用,开发者可
使用D-Bus实现各种复杂的进程间通信任务。
而Python-dbus毫无疑问就是D-Bus的Python开发接口。
建议如果没有相关Linux下折腾的经验的话,不了解删除这个包会产生的后果的话,不要尝试卸载这个包。
当然非要作死也没关系,注意看卸载时的依赖关系,有没有把其他重要的包一起卸载了。
‘肆’ 云主机服务器系统进程突然多出很多条,而且都是重复的,有没有大神碰到过这种情况的,急!!!
从进程看,应该是负载均衡出了问题,是你自己做的负载均衡吗?
如果不是,那就是你购买的这个云主机所在的平台出问题了,和你自己的云主机没关系。
我们公司用的中电华联的云主机,从来没出现过这种问题,稳定使用N个月没问题。
如果这个问题重装系统后依然存在,那么你就应该考虑更换服务商了,因为你目前的这个服务商的云主机平台已经问题多多了。
‘伍’ 云服务器突然有几个java进程时不时占用cpu请问该怎么排查和解决最近用idea在配置大数据 配置了虚拟内存
可以先从日志入手查询,如果是有业务处理,占用cpu是正常的
‘陆’ 怎么查看云服务器内存占用情况
以 Linux 云服务器为例:
free命令
命令格式: free –m
用于检查有关系统RAM的使用情况(查看系统的可用和已用内存)
云主机可用内存计算公式:可用内存 =free +buffers +cached
vmstat 指令
命令格式:vmstat -s(参数)
用于查看系统的内存存储信息,是一个报告虚拟内存统计信息的小工具,vmstat 命令报告包括:进程、内存、分页、阻塞 IO、中断、磁盘、CPU。
/proc/meminfo 指令
命令格式:cat/proc/meminfo
用于从/proc文件系统中提取与内存相关的信息。这些文件包含有 系统和内核的内部信息。
你还可以使用命令 less /proc/meminfo 直接读取该文件。通过使用 less 命令,可以在长长的输出中向上和向下滚动,找到你需要的内容。
top 指令
命令格式:top
用于打印系统中的CPU和内存使用情况。
top 最好的地方之一就是发现可能已经失控的服务的进程 ID 号(PID)。有了这些 PID,你可以对有问题的任务进行故障排除(或 kill)。
如果你想让 top 显示更友好的内存信息,使用命令 top -o %MEM,这会使 top 按进程所用内存对所有进程进行排序。
htop 指令
命令格式:htop
详细分析CPU和内存使用情况。
如果你终端没安装 htop,先通过指令来安装。
命令格式:sudo apt-get update
接着输入以下指令
命令格式:sudo apt install htop
‘柒’ dbus-daemon是什么进程
不会有任何影响 这不是系统进程 貌似是虚拟光驱
‘捌’ 怎样避免云服务器宕机迁移发生故障
首先我们知道,云服务器是部署在物理机上的,底层物理机性能如果出现异常或者其他原因,都会导致物理机宕机。当检测到云服务器所在的物理机发生故障,系统会启动保护性迁移,将你的服务器迁移到性能正常的宿主机上。
一旦发生宕机迁移,你的服务器就会被重启,如果你希望你的服务器重启以后应用服务器自动恢复,需要你把应用程序设置成开机自动启动,如果应用服务连接的数据库,需要在程序中设置成自动重连机制。
最后,为了尽量避免发生宕机迁移这种状况发生,我们在选择云服务器的时候要特别注意服务器的稳定性能。那么云服务器哪家好呢,小鸟云就不错。