i am getting 90 % cpu usage in my program which uses smack api to listnen to incoming IM and reply a dummy message which is simple two class file program . I ran the profiling and found that following clases were taking maximum time
- org.jivesoftware.smack.Roster:fireRosterChangedEvent(Collection arg1, Collection arg2, Collection arg3) : void 10.00 ms
- org.jivesoftware.smack.provider.ProviderManager:() : void 490.00 ms
- com.pagux.ibot.plugin.im.gtalk.GooglePacketListener:() : void 460.00 ms
- org.jivesoftware.smack.SmackConfiguration:() : void 220.00 ms
- org.jivesoftware.smack.ServerTrustManager:(String arg1, ConnectionConfiguration arg2) : void 730.00 ms
- org.jivesoftware.smack.PacketWriter:nextPacket() : Packet 9.07 sec
- org.jivesoftware.smack.XMPPConnection:proceedTLSReceived() : void 7.65 sec
- org.jivesoftware.smack.PacketReader:startup() : void 8.43 sec
- org.jivesoftware.smack.XMPPConnection:init() : void 90.00 ms
- org.jivesoftware.smack.SmackConfiguration:parseClassToLoad(XmlPullParser arg1) : void 100.00 ms
i am using jdk 1.5
This is simple two class files code . You can view the actual code at
http://paste-bin.com/869
and cpu profiling here
http://paste-bin.com/872
i cant yet believe smack takes so much of CPU but profiling says otherwise !!
is there any other otimization i should do to my code ? pl suggest
-> Smack CPU Sucking Vampire Code
- import org.jivesoftware.smack.Chat;
- import org.jivesoftware.smack.GoogleTalkConnection;
- import org.jivesoftware.smack.XMPPConnection;
- import org.jivesoftware.smack.XMPPException;
- import org.jivesoftware.smack.filter.PacketTypeFilter;
- import org.jivesoftware.smack.packet.Message;
- import org.jivesoftware.smack.packet.Presence;
- import com.pagux.ibot.plugin.im.Load;
- /**
-
- */
- /**
-
- @author gp
-
- */
public class Loader extends Thread implements Load {
1.
1.
1.
- boolean isLoaded;
- [String|http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1] username, password, status,server;
- [String|http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1] type=“jabber”;
-
public Loader(String username, String password, String status,[String|http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1] server) {
- super();
- this.username = username;
- this.password = password;
- this.status = status;
- this.server=server;
- }
- public void load() {
- GoogleTalkConnection googleConnection;
- try {
- if(type.equalsIgnoreCase(“jabber”))
- {
- XMPPConnection con = new XMPPConnection(server);
- con.login(username, password);
- PacketTypeFilter filter = new PacketTypeFilter (Message.class);
- con.addPacketListener(new JabberPacketListener(con), filter);
- Presence presence = new Presence(Presence.Type.fromString(status));
- presence.setStatus(status);
- con.sendPacket(presence);
- SendMessageGtalk.getInstance().setConnection(con);
- setLoaded(true);
- }else {
- googleConnection = new GoogleTalkConnection();
- PacketTypeFilter filter = new PacketTypeFilter (Message.class);
- googleConnection.login(username, password);
- googleConnection.addPacketListener(new GooglePacketListener(googleConnection), filter);
- Presence presence = new Presence(Presence.Type.fromString(status));
- presence.setStatus(status);
- googleConnection.sendPacket(presence);
- SendMessageGtalk.getInstance().setConnection(googleConnection);
- setLoaded(true);
- }
- while(true) {}
- } catch(XMPPException e) {
- e.printStackTrace();
- setLoaded(false);
- }
- }
- public void run() {
- load();
- }
- /**
-
- @param args
- */
-
public static void main(String[] args) {
- // TODO Auto-generated method stub
-
String username = "username";
-
String password = "password";
-
String status = "bhow bhow ...";
- /**/
- /*
-
- ld.setType(“jabber”);
- String username = “bhow”;
- String password = “meow”;
- String status = “bhow …”;
- */
- Loader ld = new Loader(username,password,status,“gauravp-vp-a10”);
- ld.setType(“gtalk”);
- ld.load();
- //ld.loa.lod(username, password, status);
- //String resource = “”;
- }
- public boolean isLoaded() {
- return isLoaded;
- }
- public void setLoaded(boolean isLoaded) {
- this.isLoaded = isLoaded;
- }
-
public String getType() {
- return type;
- }
-
public void setType(String type) {
- this.type = type;
- }
-
public String getStatus() {
- return status;
- }
-
public void setStatus(String status) {
- this.status = status;
- }
- }
-
- GooglePacketListner Java code
-
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import org.jivesoftware.smack.PacketListener;
- import org.jivesoftware.smack.XMPPException;
- import org.jivesoftware.smack.packet.Packet;
- import org.jivesoftware.smack.packet.Message.*;
- import org.jivesoftware.smack.*;
- import org.jivesoftware.smack.packet.*;
- import org.jivesoftware.smack.filter.*;
- import org.jivesoftware.smackx.packet.VCard;
- import org.jivesoftware.smack.GoogleTalkConnection;
- import com.pagux.ibot.actions.webservices.mq.*;
- import com.pagux.ibot.plugin.im.Im;
- import com.pagux.ibot.master.Master;
- import org.apache.log4j.Logger;
- public class GooglePacketListener implements PacketListener,Im {
- static Logger log = Logger.getLogger(“com.pagux.ibot.plugin.im.gtalk.GooglePacketListener”);
- GoogleTalkConnection connection;
-
String chatMessage;
-
String chatFrom ;
-
String userName;
- Client cl ;
- Master master;
- Patterns pats;
- public GooglePacketListener(GoogleTalkConnection googleConnection) {
- this.connection =googleConnection;
- // this.master= Master.getInstance();
- log.equals(“abe log ho ja”);
- }
- public void processPacket(Packet packet) {
- Message message = (Message)packet;
- Message.Type type = message.getType();
- //Patterns pats = new Patterns();
-
String userName,msg ;
-
String usernamePattern = "(
D**)@.**";
1.
- if(type == Message.Type.CHAT) {
- try {
-
System.out.println("Message From: " + message.getFrom() );
- Pattern pat=Pattern.compile(usernamePattern);
- Matcher matcher = pat.matcher (message.getFrom());
-
System.out.println("Result is " + matcher.find() *" "* matcher.group(1)) ;
- userName=matcher.group(1);
- msg = message.getBody();
-
System.out.println("Message: " + message.getBody() *" hi ha "*message.getTo() );
-
String user = message.getFrom();
- // master.recieveMessage(msg, user, user, userName, “gtalk”);
- Chat chat = new Chat(connection, message.getFrom());
- chat.sendMessage("take it bck : "+message.getBody() );
- // chat.sendMessage(message.getBody());
-
} catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
-
public String getChatFrom() {
- return chatFrom;
- }
-
public void setChatFrom(String chatFrom) {
- this.chatFrom = chatFrom;
- }
-
public String getChatMessage() {
- return chatMessage;
- }
-
public void setChatMessage(String chatMessage) {
- this.chatMessage = chatMessage;
- }
-
public void changePresence(String presence) {
- // TODO Auto-generated method stub
- }
-
public void recieveMesg(String user, String msg) {
- // TODO Auto-generated method stub
- }
-
public boolean sendMessage(String userid, String msg) {
- // TODO Auto-generated method stub
- return false;
Message was edited by: pagux2jabber
Message was edited by: pagux2jabber