日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Error: Password file read access must be restricted: /etc/cassandra/jmxremote.password

發(fā)布時間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Error: Password file read access must be restricted: /etc/cassandra/jmxremote.password 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在配置JMX遠(yuǎn)程訪問的時候,設(shè)置jmxremote.password文件權(quán)限,修改該文件時添加寫權(quán)限,chmod +w jmxremote.password ,放開角色信息那倆行的注釋,保存,再使用chmod 0400 jmxremote.password

這樣就是它正確的權(quán)限設(shè)置

jmxremote.password 在jdk/jre/lib/management/下,jmxremote.password.template復(fù)制,去掉.template后綴

?

轉(zhuǎn)載請注明出處:http://blog.csdn.net/l1028386804/article/details/51547408

2016年5月的最后一天,今天我將和大家分享Java中如何使用JMX來監(jiān)控Tomcat的各種狀態(tài)。好了,不多說了,我們直接進(jìn)入主題

一、激活Tomcat的JMX遠(yuǎn)程配置

要通過JMX遠(yuǎn)程監(jiān)控Tomcat,首先需要激活Tomcat的JMX遠(yuǎn)程配置。

① 修改腳本

先修改Tomcat的啟動腳本,windows下為bin/catalina.bat(linux下為catalina.sh),添加以下內(nèi)容,8999是jmxremote使用的端口號,第二個false表示不需要鑒權(quán):

?

[plain]?view plaincopy
  • set?JMX_REMOTE_CONFIG=-Dcom.sun.management.jmxremote?-Dcom.sun.management.jmxremote.port=8999?-Dcom.sun.management.jmxremote.ssl=false?-Dcom.sun.management.jmxremote.authenticate=false??
  • set?CATALINA_OPTS=%CATALINA_OPTS%?%JMX_REMOTE_CONFIG%??
  • 要注意以上語句的位置不能太后面,可以加在【if "%OS%" == "Windows_NT" setlocal】一句后的大段的注釋后面。

    ?

    參考官方說明:

    http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html#Enabling_JMX_Remote

    http://tomcat.apache.org/tomcat-7.0-doc/monitoring.html#Enabling_JMX_Remote

    http://tomcat.apache.org/tomcat-8.0-doc/monitoring.html#Enabling_JMX_Remote

    http://tomcat.apache.org/tomcat-9.0-doc/monitoring.html#Enabling_JMX_Remote

    ② 鑒權(quán)

    上面的配置是不需要鑒權(quán)的,如果需要鑒權(quán)則添加的內(nèi)容為:

    ?

    [plain]?view plaincopy
  • set?JMX_REMOTE_CONFIG=-Dcom.sun.management.jmxremote?-Dcom.sun.management.jmxremote.port=8999?-Dcom.sun.management.jmxremote.ssl=false?-Dcom.sun.management.jmxremote.authenticate=true?-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password?-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access??
  • set?CATALINA_OPTS=%CATALINA_OPTS%?%JMX_REMOTE_CONFIG%??
  • ③ 復(fù)制并修改授權(quán)文件

    $JAVA_HOME/jre/lib/management下有jmxremote.access和jmxremote.password的模板文件,將兩個文件復(fù)制到$CATALINA_BASE/conf目錄下
    ◆ 修改$CATALINA_BASE/conf/jmxremote.access 添加內(nèi)容:
    ???? monitorRole readonly
    ???? controlRole readwrite
    ◆ 修改$CATALINA_BASE/conf/jmxremote.password 添加內(nèi)容:
    ???? monitorRole chenfeng
    ???? controlRole chenfeng
    注意: 如果進(jìn)行了以上步驟導(dǎo)致Tomcat啟動不了,那么很可能是密碼文件的權(quán)限問題
    需要修改jmxremote.password文件的訪問權(quán)限,只有運行Tomcat的用戶才能擁有訪問權(quán)限 :
    ????? Windows的NTFS文件系統(tǒng)下,選中文件,點右鍵 -->“屬性”-->“安全”--> 點“高級”--> 點“更改權(quán)限”--> 去掉“從父項繼承....”--> 彈出窗口中選“刪除”,這樣就刪除了所有訪問權(quán)限。再選“添加”--> “高級”--> “立即查找”,選中你的用戶(或用戶組,如果選用戶不行那就選用戶組),例administrator,點“確定",“確定"。來到權(quán)限項目窗口,勾選“完全控制”,點“確定”,OK了。
    官方的提示:
    ????? The password file should be read-only and only accessible by the operating system user Tomcat is running as.

    ?

    ④驗證配置

    重新啟動Tomcat,在Windows命令行輸入“netstat -a”查看配置的端口號是否已打開,如果打開,說明上面的配置成功了。

    ⑤ 使用jconsole測試JMX

    運行$JAVA_HOME/bin目錄下的jconsole.exe,打開J2SE監(jiān)視和管理控制臺,然后建立連接,如果是本地的Tomcat則直接選擇然后點擊連接,如果是遠(yuǎn)程的,則進(jìn)入遠(yuǎn)程選項卡,填寫地址、端口號、用戶名、口令即可連接。。Mbean屬性頁中給出了相應(yīng)的數(shù)據(jù),Catalina中是tomcat的,java.lang是jvm的。對于加粗的黑體屬性值,需雙擊一下才可看內(nèi)容。

    二、使用JMX監(jiān)控Tomcat示例代碼

    ?

    [java]?view plaincopy
  • String?jmxURL?=?"service:jmx:rmi:///jndi/rmi://192.168.10.93:8999/jmxrmi";??
  • JMXServiceURL?serviceURL?=?new?JMXServiceURL(jmxURL);??
  • ??
  • Map?map?=?new?HashMap();??
  • //?用戶名密碼,在jmxremote.password文件中查看??
  • String[]?credentials?=?new?String[]?{?"monitorRole",?"tomcat"?};??
  • map.put("jmx.remote.credentials",?credentials);??
  • JMXConnector?connector?=?JMXConnectorFactory.connect(serviceURL,?map);??
  • MBeanServerConnection?mbsc?=?connector.getMBeanServerConnection();??
  • ??
  • //?端口最好是動態(tài)取得??
  • ObjectName?threadObjName?=?new?ObjectName("Catalina:type=ThreadPool,name=http-8080");??
  • MBeanInfo?mbInfo?=?mbsc.getMBeanInfo(threadObjName);??
  • ??
  • //?tomcat的線程數(shù)對應(yīng)的屬性值??
  • String?attrName?=?"currentThreadCount";??
  • MBeanAttributeInfo[]?mbAttributes?=?mbInfo.getAttributes();??
  • System.out.println("currentThreadCount:"?+?mbsc.getAttribute(threadObjName,?attrName));??
  • 三、完整的示例代碼文件

    ?

    ?

    [java]?view plaincopy
  • import?java.lang.management.MemoryUsage;??
  • import?java.text.SimpleDateFormat;??
  • import?java.util.Date;??
  • import?java.util.Formatter;??
  • import?java.util.HashMap;??
  • import?java.util.Iterator;??
  • import?java.util.Map;??
  • import?java.util.Set;??
  • ??
  • import?javax.management.MBeanAttributeInfo;??
  • import?javax.management.MBeanInfo;??
  • import?javax.management.MBeanServerConnection;??
  • import?javax.management.ObjectInstance;??
  • import?javax.management.ObjectName;??
  • import?javax.management.openmbean.CompositeDataSupport;??
  • import?javax.management.remote.JMXConnector;??
  • import?javax.management.remote.JMXConnectorFactory;??
  • import?javax.management.remote.JMXServiceURL;??
  • /**?
  • ?*?@author?liuyazhuang?
  • ?*?@date?2016-05-31??
  • ?*/??
  • public?class?JMXTest?{??
  • ??
  • ????/**?
  • ?????*?main方法?
  • ?????*?@param?args?
  • ?????*/??
  • ????public?static?void?main(String[]?args)?{??
  • ????????try?{??
  • ??
  • ????????????String?jmxURL?=?"service:jmx:rmi:///jndi/rmi://127.0.0.1:8999/jmxrmi";??
  • ??
  • ????????????JMXServiceURL?serviceURL?=?new?JMXServiceURL(jmxURL);??
  • ??
  • ????????????Map?map?=?new?HashMap();??
  • ????????????String[]?credentials?=?new?String[]?{?"monitorRole",?"tomcat"?};??
  • ????????????map.put("jmx.remote.credentials",?credentials);??
  • ????????????JMXConnector?connector?=?JMXConnectorFactory.connect(serviceURL,??
  • ????????????????????map);??
  • ????????????MBeanServerConnection?mbsc?=?connector.getMBeanServerConnection();??
  • ??
  • ????????????//?端口最好是動態(tài)取得??
  • ????????????ObjectName?threadObjName?=?new?ObjectName(??
  • ????????????????????"Catalina:type=ThreadPool,name=http-8080");??
  • ????????????MBeanInfo?mbInfo?=?mbsc.getMBeanInfo(threadObjName);??
  • ??
  • ????????????String?attrName?=?"currentThreadCount";//?tomcat的線程數(shù)對應(yīng)的屬性值??
  • ????????????MBeanAttributeInfo[]?mbAttributes?=?mbInfo.getAttributes();??
  • ????????????System.out.println("currentThreadCount:"??
  • ????????????????????+?mbsc.getAttribute(threadObjName,?attrName));??
  • ??
  • ????????????//?heap??
  • ????????????for?(int?j?=?0;?j?<?mbsc.getDomains().length;?j++)?{??
  • ????????????????System.out.println("###########"?+?mbsc.getDomains()[j]);??
  • ????????????}??
  • ????????????Set?MBeanset?=?mbsc.queryMBeans(null,?null);??
  • ????????????System.out.println("MBeanset.size()?:?"?+?MBeanset.size());??
  • ????????????Iterator?MBeansetIterator?=?MBeanset.iterator();??
  • ????????????while?(MBeansetIterator.hasNext())?{??
  • ????????????????ObjectInstance?objectInstance?=?(ObjectInstance)?MBeansetIterator??
  • ????????????????????????.next();??
  • ????????????????ObjectName?objectName?=?objectInstance.getObjectName();??
  • ????????????????String?canonicalName?=?objectName.getCanonicalName();??
  • ????????????????System.out.println("canonicalName?:?"?+?canonicalName);??
  • ????????????????if?(canonicalName??
  • ????????????????????????.equals("Catalina:host=localhost,type=Cluster"))?{??
  • ????????????????????//?Get?details?of?cluster?MBeans??
  • ????????????????????System.out.println("Cluster?MBeans?Details:");??
  • ????????????????????System.out??
  • ????????????????????????????.println("=========================================");??
  • ????????????????????//?getMBeansDetails(canonicalName);??
  • ????????????????????String?canonicalKeyPropList?=?objectName??
  • ????????????????????????????.getCanonicalKeyPropertyListString();??
  • ????????????????}??
  • ????????????}??
  • ????????????//?-------------------------?system?----------------------??
  • ????????????ObjectName?runtimeObjName?=?new?ObjectName("java.lang:type=Runtime");??
  • ????????????System.out.println("廠商:"??
  • ????????????????????+?(String)?mbsc.getAttribute(runtimeObjName,?"VmVendor"));??
  • ????????????System.out.println("程序:"??
  • ????????????????????+?(String)?mbsc.getAttribute(runtimeObjName,?"VmName"));??
  • ????????????System.out.println("版本:"??
  • ????????????????????+?(String)?mbsc.getAttribute(runtimeObjName,?"VmVersion"));??
  • ????????????Date?starttime?=?new?Date((Long)?mbsc.getAttribute(runtimeObjName,??
  • ????????????????????"StartTime"));??
  • ????????????SimpleDateFormat?df?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");??
  • ????????????System.out.println("啟動時間:"?+?df.format(starttime));??
  • ??
  • ????????????Long?timespan?=?(Long)?mbsc.getAttribute(runtimeObjName,?"Uptime");??
  • ????????????System.out.println("連續(xù)工作時間:"?+?JMXTest.formatTimeSpan(timespan));??
  • ????????????//?------------------------?JVM?-------------------------??
  • ????????????//?堆使用率??
  • ????????????ObjectName?heapObjName?=?new?ObjectName("java.lang:type=Memory");??
  • ????????????MemoryUsage?heapMemoryUsage?=?MemoryUsage??
  • ????????????????????.from((CompositeDataSupport)?mbsc.getAttribute(heapObjName,??
  • ????????????????????????????"HeapMemoryUsage"));??
  • ????????????long?maxMemory?=?heapMemoryUsage.getMax();//?堆最大??
  • ????????????long?commitMemory?=?heapMemoryUsage.getCommitted();//?堆當(dāng)前分配??
  • ????????????long?usedMemory?=?heapMemoryUsage.getUsed();??
  • ????????????System.out.println("heap:"?+?(double)?usedMemory?*?100??
  • ????????????????????/?commitMemory?+?"%");//?堆使用率??
  • ??
  • ????????????MemoryUsage?nonheapMemoryUsage?=?MemoryUsage??
  • ????????????????????.from((CompositeDataSupport)?mbsc.getAttribute(heapObjName,??
  • ????????????????????????????"NonHeapMemoryUsage"));??
  • ????????????long?noncommitMemory?=?nonheapMemoryUsage.getCommitted();??
  • ????????????long?nonusedMemory?=?heapMemoryUsage.getUsed();??
  • ????????????System.out.println("nonheap:"?+?(double)?nonusedMemory?*?100??
  • ????????????????????/?noncommitMemory?+?"%");??
  • ??
  • ????????????ObjectName?permObjName?=?new?ObjectName(??
  • ????????????????????"java.lang:type=MemoryPool,name=Perm?Gen");??
  • ????????????MemoryUsage?permGenUsage?=?MemoryUsage??
  • ????????????????????.from((CompositeDataSupport)?mbsc.getAttribute(permObjName,??
  • ????????????????????????????"Usage"));??
  • ????????????long?committed?=?permGenUsage.getCommitted();//?持久堆大小??
  • ????????????long?used?=?heapMemoryUsage.getUsed();//??
  • ????????????System.out.println("perm?gen:"?+?(double)?used?*?100?/?committed??
  • ????????????????????+?"%");//?持久堆使用率??
  • ??
  • ????????????//?--------------------?Session?---------------??
  • ????????????ObjectName?managerObjName?=?new?ObjectName(??
  • ????????????????????"Catalina:type=Manager,*");??
  • ????????????Set<ObjectName>?s?=?mbsc.queryNames(managerObjName,?null);??
  • ????????????for?(ObjectName?obj?:?s)?{??
  • ????????????????System.out.println("應(yīng)用名:"?+?obj.getKeyProperty("path"));??
  • ????????????????ObjectName?objname?=?new?ObjectName(obj.getCanonicalName());??
  • ????????????????System.out.println("最大會話數(shù):"??
  • ????????????????????????+?mbsc.getAttribute(objname,?"maxActiveSessions"));??
  • ????????????????System.out.println("會話數(shù):"??
  • ????????????????????????+?mbsc.getAttribute(objname,?"activeSessions"));??
  • ????????????????System.out.println("活動會話數(shù):"??
  • ????????????????????????+?mbsc.getAttribute(objname,?"sessionCounter"));??
  • ????????????}??
  • ??
  • ????????????//?-----------------?Thread?Pool?----------------??
  • ????????????ObjectName?threadpoolObjName?=?new?ObjectName(??
  • ????????????????????"Catalina:type=ThreadPool,*");??
  • ????????????Set<ObjectName>?s2?=?mbsc.queryNames(threadpoolObjName,?null);??
  • ????????????for?(ObjectName?obj?:?s2)?{??
  • ????????????????System.out.println("端口名:"?+?obj.getKeyProperty("name"));??
  • ????????????????ObjectName?objname?=?new?ObjectName(obj.getCanonicalName());??
  • ????????????????System.out.println("最大線程數(shù):"??
  • ????????????????????????+?mbsc.getAttribute(objname,?"maxThreads"));??
  • ????????????????System.out.println("當(dāng)前線程數(shù):"??
  • ????????????????????????+?mbsc.getAttribute(objname,?"currentThreadCount"));??
  • ????????????????System.out.println("繁忙線程數(shù):"??
  • ????????????????????????+?mbsc.getAttribute(objname,?"currentThreadsBusy"));??
  • ????????????}??
  • ??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • ??
  • ????public?static?String?formatTimeSpan(long?span)?{??
  • ????????long?minseconds?=?span?%?1000;??
  • ??
  • ????????span?=?span?/?1000;??
  • ????????long?seconds?=?span?%?60;??
  • ??
  • ????????span?=?span?/?60;??
  • ????????long?mins?=?span?%?60;??
  • ??
  • ????????span?=?span?/?60;??
  • ????????long?hours?=?span?%?24;??
  • ??
  • ????????span?=?span?/?24;??
  • ????????long?days?=?span;??
  • ????????return?(new?Formatter()).format("%1$d天?%2$02d:%3$02d:%4$02d.%5$03d",??
  • ????????????????days,?hours,?mins,?seconds,?minseconds).toString();??
  • ????}??
  • } ?
  • 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的Error: Password file read access must be restricted: /etc/cassandra/jmxremote.password的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。