Здравствуйте. Запускаю консольное приложение (Java) на Ubuntu через программу Putty командой nohup java -jar "App.jar"> /dev/null &
, и через какое-то время процессор начинает грузиться на 100%. Приложение легковесное. Из-за чего это может быть?
Добавил код.Пожалуйста помогите с оптимизацией.
Главный Класс (запускающий поток с новым сокетом) :
public class MainSocket {
public static void main(String[] args) throws IOException {
HashMap<String,SecondSocket> hashMap = new HashMap();
ServerSocket serverSocket = new ServerSocket(5555);
BufferedReader bufferedReader = null;
PrintWriter printWriter = null;
String clientKey = null;
while(true){
System.out.println("Ожидание нового подключения...");
Socket socket = serverSocket.accept();
System.out.println("Старт");
try
{
printWriter = new PrintWriter(socket.getOutputStream(),true);
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), Charset.forName("cp1251")));
clientKey = bufferedReader.readLine();
System.out.println("key ot klienta"+clientKey);
}catch (Exception e){}
//Когда есть новое подключение запускаю новый поток для работы с ним
if(hashMap.size()!=0){
if(hashMap.get(clientKey)!=null){
SecondSocket mySocketThread = hashMap.get(clientKey);
mySocketThread.setSocket(socket);
mySocketThread.setBufferedReader(bufferedReader);
mySocketThread.setPrintWriter(printWriter);
printWriter.println("ваш поток найден");
}else{
printWriter.println("для вас создан новый поток");
SecondSocket mySocketThread = new SecondSocket(socket,bufferedReader,printWriter);
hashMap.put(clientKey,mySocketThread);
mySocketThread.start();
}
}else{
printWriter.println("для вас создан новый поток");
SecondSocket mySocketThread = new SecondSocket(socket,bufferedReader,printWriter);
hashMap.put(clientKey, mySocketThread);
mySocketThread.start();
}
System.out.println("OBSHEE CHISLO POTOKOV : "+hashMap.size());
}
}
}
Класс поток :
class SecondSocket extends Thread{
String connectionUrl = "jdbc:sqlserver://127.0.0.1;databaseName=mydb;user=myname;password=pass";
Connection connection = null;
CallableStatement cstmt = null;
String userId = null;
String xml = null;
Document document = null;
Elements xmlTag = null;
Element e = null;
BufferedReader bufferedReader = null;
PrintWriter printWriter = null;
Socket socket = null;
public SecondSocket(Socket socket,BufferedReader bufferedReader,PrintWriter printWriter){
this.socket = socket;
this.bufferedReader = bufferedReader;
this.printWriter = printWriter;
try {
connection = DriverManager.getConnection(connectionUrl);
}catch(Exception e){
try {
connection.rollback();
} catch (SQLException e1) {
}
}
try {
xml = bufferedReader.readLine();
System.out.println(xml);
} catch (IOException e1) {
}
try {
cstmt = connection.prepareCall("{call xml_parser(?,?)}");
cstmt.setString(1, xml);
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.execute();
document = Jsoup.parse(cstmt.getString(2));
xmlTag = document.getElementsByTag("codeid");
try{
e = xmlTag.get(0);
userId = e.text();
}catch (Exception e){}
} catch (Exception e) {
}
}
@Override
public void run() {
while(true){
while(socket!=null){
if(userId!=null){
try {
cstmt = connection.prepareCall("{call xml_parser_new(?,?)}");
cstmt.setInt(1, Integer.valueOf(userId));
cstmt.registerOutParameter(2, Types.INTEGER);
cstmt.execute();
printWriter.println(cstmt.getString(2));
} catch (Exception e) {
e.printStackTrace();
}
try{
while ((xml = bufferedReader.readLine()) != null) {
System.out.println(xml);
cstmt.execute();
if (cstmt.getString(2).equals("1")) {
printWriter.println(cstmt.getString(2));
}else {
printWriter.println("0");
}
}
}catch(IOException e){
} catch (SQLException e1) {
} finally {
try {
cstmt.close();
socket.close();
socket = null;
xml = "";
e = null;
xmlTag = null;
document = null;
bufferedReader.close();
bufferedReader = null;
printWriter.close();
printWriter = null;
System.out.println("сработал finally block");
} catch (SQLException e1) {
} catch (IOException e1) {
}
}
}
System.out.println("сработал конечный while");
}
System.out.println("Работает while true");
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
}
}
}
public BufferedReader getBufferedReader() {
return bufferedReader;
}
public void setBufferedReader(BufferedReader bufferedReader) {
this.bufferedReader = bufferedReader;
}
public PrintWriter getPrintWriter() {
return printWriter;
}
public void setPrintWriter(PrintWriter printWriter) {
this.printWriter = printWriter;
}
public Socket getSocket() {
return socket;
}
public void setSocket(Socket socket) {
this.socket = socket;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SecondSocket)) return false;
SecondSocket that = (SecondSocket) o;
if (bufferedReader != null ? !bufferedReader.equals(that.bufferedReader) : that.bufferedReader != null)
return false;
if (connection != null ? !connection.equals(that.connection) : that.connection != null) return false;
if (connectionUrl != null ? !connectionUrl.equals(that.connectionUrl) : that.connectionUrl != null)
return false;
if (cstmt != null ? !cstmt.equals(that.cstmt) : that.cstmt != null) return false;
if (document != null ? !document.equals(that.document) : that.document != null) return false;
if (e != null ? !e.equals(that.e) : that.e != null) return false;
if (xml != null ? !xml.equals(that.xml) : that.xml != null) return false;
if (printWriter != null ? !printWriter.equals(that.printWriter) : that.printWriter != null) return false;
if (socket != null ? !socket.equals(that.socket) : that.socket != null) return false;
if (userId != null ? !userId.equals(that.userId) : that.userId != null) return false;
if (xmlTag != null ? !xmlTag.equals(that.xmlTag) : that.xmlTag != null) return false;
return true;
}
@Override
public int hashCode() {
int result = connectionUrl != null ? connectionUrl.hashCode() : 0;
result = 31 * result + (connection != null ? connection.hashCode() : 0);
result = 31 * result + (cstmt != null ? cstmt.hashCode() : 0);
result = 31 * result + (userId != null ? userId.hashCode() : 0);
result = 31 * result + (xml != null ? xml.hashCode() : 0);
result = 31 * result + (document != null ? document.hashCode() : 0);
result = 31 * result + (xmlTag != null ? xmlTag.hashCode() : 0);
result = 31 * result + (e != null ? e.hashCode() : 0);
result = 31 * result + (bufferedReader != null ? bufferedReader.hashCode() : 0);
result = 31 * result + (printWriter != null ? printWriter.hashCode() : 0);
result = 31 * result + (socket != null ? socket.hashCode() : 0);
return result;
}
}
В каких случаях может понадобиться добавлять такую область для зависимости? Что то не могу представить чтобы либа нужна была только в рантайме...
Вначале про бизнес-логикуЕсть идея программы, часть функций уже реализована, структура (как на картинке) уже создана
Хочу получить данные из своей базы данных в Firebase, а точнее поле Имя Моя база имеет такую структуру: