雲伺服器很多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是什麼進程
不會有任何影響 這不是系統進程 貌似是虛擬光碟機
『捌』 怎樣避免雲伺服器宕機遷移發生故障
首先我們知道,雲伺服器是部署在物理機上的,底層物理機性能如果出現異常或者其他原因,都會導致物理機宕機。當檢測到雲伺服器所在的物理機發生故障,系統會啟動保護性遷移,將你的伺服器遷移到性能正常的宿主機上。
一旦發生宕機遷移,你的伺服器就會被重啟,如果你希望你的伺服器重啟以後應用伺服器自動恢復,需要你把應用程序設置成開機自動啟動,如果應用服務連接的資料庫,需要在程序中設置成自動重連機制。
最後,為了盡量避免發生宕機遷移這種狀況發生,我們在選擇雲伺服器的時候要特別注意伺服器的穩定性能。那麼雲伺服器哪家好呢,小鳥雲就不錯。